マイクロサービスアーキテクチャの実戦編(三):Spring book t 2.0+Mybatis+PageHelperは添削とページ別検索機能を実現します.


概要
このプロジェクトは主にSpring book t 2.0+Mybatis+PageHelperを利用して、添削とページ別の検索機能を実現して、快速にセットとデータベースのインタラクティブなプロジェクトを構築します.
  • ソースの住所
  • GitHub:https://github.com/yundianzixun/Spring-boot2.0-Mybatis-PageHelper
  • 連盟公衆番号:IT実戦連盟
  • 私達のコミュニティ:https://100boot.cn
  • 使用中に問題があったら、Issueを提出してもいいです.私は全力を尽くしてこのスターを改善します.
    バージョンベース
  • Spring Boot:2.04
  • Mybatis:3.4.5
  • Druid:1.1.10
  • PageHelper:4.1.6
  • 操作手順
    第一歩:SpringBoot 2.0+Swagger 2プロジェクトをダウンロードします.
  • GitHubアドレス:https://github.com/yundianzixun/spring-boot-starter-swagger2
  • 参照文書:https://www.jianshu.com/p/61db1a6ca425 備考:マイクロサービスアーキテクチャの実戦シリーズは、中間部品を統合するごとにGitHubに配置され、教程に従ってマイクロサービスアーキテクチャを一歩ずつ学ぶことができます.
  • ステップ2:maven依存追加(完全依存)
    
    
        4.0.0
    
        com.itunion
        spring-boot-starter-mybatis
        0.0.1-SNAPSHOT
        jar
    
        spring-boot-starter-mybatis
        Demo project for Spring Boot
    
        
            org.springframework.boot
            spring-boot-starter-parent
            2.0.4.RELEASE
             
        
    
        
            UTF-8
            UTF-8
            1.8
        
    
        
            
                org.mybatis.spring.boot
                mybatis-spring-boot-starter
                1.3.2
            
            
                mysql
                mysql-connector-java
                runtime
            
            
            
                org.mybatis
                mybatis
                3.4.5
            
            
            
                org.mybatis
                mybatis-spring
                1.3.1
            
            
                com.github.pagehelper
                pagehelper
                4.1.6
            
            
            
                com.alibaba
                druid
                1.1.10
            
    
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
    
            
                io.springfox
                springfox-swagger2
                2.7.0
            
            
                io.springfox
                springfox-swagger-ui
                2.7.0
            
            
                org.apache.tomcat.embed
                tomcat-embed-jasper
            
            
            
                org.springframework.boot
                spring-boot-starter-tomcat
                
            
            
                org.springframework.boot
                spring-boot-starter-web
            
        
    
        
            
            demo
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                
                
                
                    org.apache.maven.plugins
                    maven-war-plugin
                    2.1.1
                    
                        false
                    
                
                
            
        
    
    
    
    ステップ3:appication.properties設定(完全構成)
    server.port=8081
    
    server.servlet.context-path=/Demo
    
    server.tomcat.accesslog.enabled=true
    
    druid.driver=com.mysql.jdbc.Driver
    druid.url=jdbc:mysql://127.0.0.1:3306/     ?serverTimezone=Asia/Shanghai&allowMultiQueries=true
    druid.username=      
    druid.password=     
    druid.init-size=1
    druid.min-idel=1
    druid.max-active=5
    druid.login.timeout.seconds=30
    druid.query.timeout.seconds=30
    
    swagger.enable=true
    
    ステップ4:mybatis-config.xmlファイルを追加します.
    
    
    
        
            
            
            
            
            
            
            
        
        
            
                
            
        
        
            
        
    
    
    
    コメント
  • PageHelperは、改ページプラグイン
  • である.
  • UserInfoMapper.xmlは、本記事ではユーザーの添削を実現するためのマッピングファイル
  • です.
    第五ステップ:データベース接続池の作成Datasource(DatasourceConfig.java)
    package com.itunion.springbootstartermybatis.config;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.annotation.MapperScan;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import javax.annotation.PostConstruct;
    import javax.sql.DataSource;
    
    @Configuration
    @MapperScan(basePackages = "com.itunion.springbootstartermybatis.mapper")
    public class DatasourceConfig {
        private static Logger log = LoggerFactory.getLogger(DatasourceConfig.class);
        @Value("${druid.driver}")
        private String driverClassName;
        @Value("${druid.url}")
        private String url;
        @Value("${druid.username}")
        private String username;
        @Value("${druid.password}")
        private String password;
        @Value("${druid.init-size}")
        private int initSize;
        @Value("${druid.min-idel}")
        private int minIdel;
        @Value("${druid.max-active}")
        private int maxActive;
        @Value("${druid.login.timeout.seconds}")
        private int loginTimeoutSeconds;
        @Value("${druid.query.timeout.seconds}")
        private int queryTimeoutSeconds;
    
        @Bean
        public DataSource dataSource() {
            DruidDataSource ds = new DruidDataSource();
            ds.setDriverClassName(driverClassName);
            ds.setUrl(url);
            ds.setUsername(username);
            ds.setPassword(password);
            ds.setInitialSize(initSize);
            ds.setMinIdle(minIdel);
            ds.setMaxActive(maxActive);
            ds.setLoginTimeout(loginTimeoutSeconds);
            ds.setQueryTimeout(queryTimeoutSeconds);
            return ds;
        }
    
        @Bean
        public SqlSessionFactory sqlSessionFactory() throws Exception {
            final SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
            sqlSessionFactory.setDataSource(dataSource());
            sqlSessionFactory.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
            sqlSessionFactory.setFailFast(true);
            return sqlSessionFactory.getObject();
        }
    
        public DataSourceTransactionManager dataSourceTransactionManager() {
            log.debug("> transactionManager");
            return new DataSourceTransactionManager(dataSource());
        }
    
    
        @PostConstruct
        public void postConstruct() {
            log.info("jdbc settings={}", this);
        }
    }
    
    
    ステップ6:UserInfoMapper.xmlの作成
    
    
    
      
        
        
        
        
        
        
        
      
      
        id, user_name, password, sex, content, create_date, update_date
      
      
      
        delete from user_info
        where id = #{id,jdbcType=INTEGER}
      
      
        insert into user_info (id, user_name, password, 
          sex, content, create_date, 
          update_date)
        values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
          #{sex,jdbcType=VARCHAR}, #{content,jdbcType=VARCHAR}, #{createDate,jdbcType=TIMESTAMP}, 
          #{updateDate,jdbcType=TIMESTAMP})
      
      
        insert into user_info
        
          
            id,
          
          
            user_name,
          
          
            password,
          
          
            sex,
          
          
            content,
          
          
            create_date,
          
          
            update_date,
          
        
        
          
            #{id,jdbcType=INTEGER},
          
          
            #{userName,jdbcType=VARCHAR},
          
          
            #{password,jdbcType=VARCHAR},
          
          
            #{sex,jdbcType=VARCHAR},
          
          
            #{content,jdbcType=VARCHAR},
          
          
            #{createDate,jdbcType=TIMESTAMP},
          
          
            #{updateDate,jdbcType=TIMESTAMP},
          
        
      
      
        update user_info
        
          
            user_name = #{userName,jdbcType=VARCHAR},
          
          
            password = #{password,jdbcType=VARCHAR},
          
          
            sex = #{sex,jdbcType=VARCHAR},
          
          
            content = #{content,jdbcType=VARCHAR},
          
          
            create_date = #{createDate,jdbcType=TIMESTAMP},
          
          
            update_date = #{updateDate,jdbcType=TIMESTAMP},
          
        
        where id = #{id,jdbcType=INTEGER}
      
      
        update user_info
        set user_name = #{userName,jdbcType=VARCHAR},
          password = #{password,jdbcType=VARCHAR},
          sex = #{sex,jdbcType=VARCHAR},
          content = #{content,jdbcType=VARCHAR},
          create_date = #{createDate,jdbcType=TIMESTAMP},
          update_date = #{updateDate,jdbcType=TIMESTAMP}
        where id = #{id,jdbcType=INTEGER}
      
    
    
        
    
    
  • は、ユーザーテーブルの添削とバッチクエリのsql文
  • を実現した.
    第七ステップ:UserInfoエンティティクラスを作成する
    package com.itunion.springbootstartermybatis.model;
    
    import java.util.Date;
    
    public class UserInfo {
        private Integer id;
    
        private String userName;
    
        private String password;
    
        private String sex;
    
        private String content;
    
        private Date createDate;
    
        private Date updateDate;
    
            get/set  
    }
    
    
    ステップ8:UserInfoMapperの作成
    package com.itunion.springbootstartermybatis.mapper;
    import com.itunion.springbootstartermybatis.model.UserInfo;
    import com.itunion.springbootstartermybatis.web.dto.UserInfoReqListDto;
    import com.itunion.springbootstartermybatis.web.dto.UserInfoDto;
    import java.util.List;
    
    public interface UserInfoMapper {
        int deleteByPrimaryKey(Integer id);
    
        int insert(UserInfo record);
    
        int insertSelective(UserInfo record);
    
        UserInfo selectByPrimaryKey(Integer id);
    
        int updateByPrimaryKeySelective(UserInfo record);
    
        int updateByPrimaryKey(UserInfo record);
    
        /**
         *         
         * @return
         */
        List getUserInfoList(UserInfoReqListDto userInfoReqListDto);
    }
    
    
    第九ステップ:UserInfoServiceインターフェースとインターフェースを作成して実現する.
    UserInfoService.java
    package com.itunion.springbootstartermybatis.service;
    
    import com.github.pagehelper.PageInfo;
    import com.itunion.springbootstartermybatis.web.dto.UserInfoDto;
    import com.itunion.springbootstartermybatis.web.dto.UserInfoReqListDto;
    
    import java.util.List;
    
    /**
     *       
     * Created by lin on 2018 06 07 21:12:04
     */
    public interface UserInfoService {
        /**
         *       
         */
        int addUserInfo(UserInfoDto record);
    
        /**
         *         
         */
        List getUserInfoList();
    
        /**
         *     ID      
         */
        int delUserInfoById(Integer id);
    
        /**
         *     ID      
         */
        int modifyUserInfoById(UserInfoDto record);
    
        /**
         *     
         */
        PageInfo getUserInfoListPage(UserInfoReqListDto userInfoReqListDto);
    }
    
    UserInfoServiceImpl.java
    package com.itunion.springbootstartermybatis.service.impl;
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.itunion.springbootstartermybatis.mapper.UserInfoMapper;
    import com.itunion.springbootstartermybatis.model.UserInfo;
    import com.itunion.springbootstartermybatis.service.UserInfoService;
    import com.itunion.springbootstartermybatis.web.dto.UserInfoDto;
    import com.itunion.springbootstartermybatis.web.dto.UserInfoReqListDto;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.BeanUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    
    /**
     *     -     
     * Created by lin on 2018 06 07 21:48:13
     */
    @Service
    public class UserInfoServiceImpl implements UserInfoService {
        private final static Logger LOGGER = LoggerFactory.getLogger(UserInfoServiceImpl.class);
        @Autowired
        private UserInfoMapper userInfoMapper;
    
        @Override
        public int addUserInfo(UserInfoDto record) {
            LOGGER.info("      -     -UserInfoServiceImpl.addUserInfo[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "]");
            UserInfo userInfo = new UserInfo();
            BeanUtils.copyProperties(record, userInfo);
            userInfo.setUpdateDate(new Date());
            return userInfoMapper.insertSelective(userInfo);
        }
    
        @Override
        public List getUserInfoList() {
            LOGGER.info("      -     -UserInfoServiceImpl.getUserInfoList[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "]");
            return userInfoMapper.getUserInfoList(null);
        }
    
        @Override
        public int delUserInfoById(Integer id) {
            LOGGER.info("      -     -UserInfoServiceImpl.delUserInfoById[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "]");
            return userInfoMapper.deleteByPrimaryKey(id);
        }
    
        @Override
        public int modifyUserInfoById(UserInfoDto record) {
            LOGGER.info("      -     -UserInfoServiceImpl.modifyUserInfoById[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "]");
            UserInfo userInfo = new UserInfo();
            BeanUtils.copyProperties(record, userInfo);
            userInfo.setUpdateDate(new Date());
            return userInfoMapper.updateByPrimaryKeySelective(userInfo);
        }
    
        @Override
        public PageInfo getUserInfoListPage(UserInfoReqListDto userInfoReqListDto) {
            LOGGER.info("      -     -UserInfoServiceImpl.getUserInfoListPage[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "]");
            PageHelper.startPage(userInfoReqListDto.getPage(), userInfoReqListDto.getSize());
            List userInfoDtos = userInfoMapper.getUserInfoList(userInfoReqListDto);
            PageInfo userInfoDtoPageInfo = new PageInfo<>(userInfoDtos);
            return userInfoDtoPageInfo;
        }
    }
    
    
    第十歩:UserInfoControllerを作成する
    package com.itunion.springbootstartermybatis.web.controller;
    
    import com.github.pagehelper.PageInfo;
    import com.itunion.springbootstartermybatis.common.UniformResultTemplate;
    import com.itunion.springbootstartermybatis.service.UserInfoService;
    import com.itunion.springbootstartermybatis.web.dto.UserInfoDto;
    import com.itunion.springbootstartermybatis.web.dto.UserInfoReqListDto;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiImplicitParam;
    import io.swagger.annotations.ApiOperation;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.MediaType;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    
    import javax.servlet.http.HttpServletRequest;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    
    /**
     *     -      
     * Created by lin on 2018 06 07 22:02:07
     */
    @Controller
    @RequestMapping("userInfo")
    @Api(description = "    ")
    public class UserInfoController {
        private Logger LOGGER = LoggerFactory.getLogger(UserInfoController.class);
    
        @Autowired
        UserInfoService userInfoService;
    
        @ApiOperation(value = "getUserInfoList", notes = "        ")
        @RequestMapping(value = "getUserInfoList", method = RequestMethod.GET)
        @ResponseBody
        public UniformResultTemplate> getUserInfoList() {
            LOGGER.info("      -      -UserInfoController.getUserInfoList[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "]");
            UniformResultTemplate> uniformResultTemplate = new UniformResultTemplate<>();
            uniformResultTemplate.setCode(100);
            uniformResultTemplate.setMessage("          !");
            uniformResultTemplate.setResult(userInfoService.getUserInfoList());
            return uniformResultTemplate;
        }
    
        @ApiOperation(value = "getUserInfoListPage", notes = "        -  ")
        @ApiImplicitParam(name = "userInfoReqListDto", value = "{\"page\":\"1\",\"size\":\"2\"}")
        @RequestMapping(value = "getUserInfoListPage", method = RequestMethod.POST)
        @ResponseBody
        public UniformResultTemplate getUserInfoList(@RequestBody UserInfoReqListDto userInfoReqListDto) {
            LOGGER.info("      -      -UserInfoController.getUserInfoListPage[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "]");
            UniformResultTemplate uniformResultTemplate = new UniformResultTemplate<>();
            uniformResultTemplate.setCode(100);
            uniformResultTemplate.setMessage("            !");
            uniformResultTemplate.setResult(userInfoService.getUserInfoListPage(userInfoReqListDto));
            return uniformResultTemplate;
        }
    
        @ApiOperation(value = "addUserInfo", notes = "      ")
        @ApiImplicitParam(name = "userInfoDto", value = "{\"userName\":\"     \",\"password\":\"000000\",\"sex\":1,\"content\":\"   IT    ~~~\"}")
        @RequestMapping(value="addUserInfo", method = RequestMethod.POST)
        @ResponseBody
        public UniformResultTemplate addUserInfo(@RequestBody UserInfoDto userInfoDto) {
    
        LOGGER.info("      -      -UserInfoController.addUserInfo[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "]");
            UniformResultTemplate uniformResultTemplate = new UniformResultTemplate<>();
            Integer num = userInfoService.addUserInfo(userInfoDto);
            if(num > 0){
                uniformResultTemplate.setCode(100);
                uniformResultTemplate.setMessage("        !");
                uniformResultTemplate.setResult(num+"");
            }else{
                uniformResultTemplate.setCode(400);
                uniformResultTemplate.setMessage("        !");
                uniformResultTemplate.setResult(num+"");
            }
            return uniformResultTemplate;
        }
    
    
        @ApiOperation(value="delUserInfoById", notes="    ID      ")
        @ApiImplicitParam(name = "id", value = "4" , paramType="path" , dataType="Integer")
        @RequestMapping(value="delUserInfoById/{id}", method = RequestMethod.POST)
        @ResponseBody
        public UniformResultTemplate deleteKdgVipItem(@PathVariable Integer id) {
            LOGGER.info("      -      -UserInfoController.delUserInfoById[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "]");
            UniformResultTemplate uniformResultTemplate = new UniformResultTemplate<>();
            Integer num = userInfoService.delUserInfoById(id);
            if(num > 0){
                uniformResultTemplate.setCode(100);
                uniformResultTemplate.setMessage("    ID        !");
                uniformResultTemplate.setResult(num+"");
            }else{
                uniformResultTemplate.setCode(400);
                uniformResultTemplate.setMessage("    ID        !");
                uniformResultTemplate.setResult(num+"");
            }
            return uniformResultTemplate;
        }
    
        @ApiOperation(value = "modifyUserInfo", notes = "      ")
        @ApiImplicitParam(name = "userInfoDto", value = "{\"id\":10,\"userName\":\"       \",\"password\":55555,\"sex\":1,\"content\":\"      IT    ~~~\"}")
        @RequestMapping(value="modifyUserInfo", method = RequestMethod.POST, produces= MediaType.APPLICATION_JSON_UTF8_VALUE)
        @ResponseBody
        public UniformResultTemplate modifyUserInfo(@RequestBody UserInfoDto userInfoDto) {
            LOGGER.info("      -      -UserInfoController.modifyUserInfo[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "]");
            UniformResultTemplate uniformResultTemplate = new UniformResultTemplate<>();
            Integer num = userInfoService.modifyUserInfoById(userInfoDto);
            if(num > 0){
                uniformResultTemplate.setCode(100);
                uniformResultTemplate.setMessage("        !");
                uniformResultTemplate.setResult(num+"");
            }else{
                uniformResultTemplate.setCode(400);
                uniformResultTemplate.setMessage("        !");
                uniformResultTemplate.setResult(num+"");
            }
            return uniformResultTemplate;
        }
    }
    
    
    ステップ11:Spring Bootation起動
    package com.itunion.springbootstartermybatis;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    public class SpringBootStarterMybatisApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootStarterMybatisApplication.class, args);
        }
    }
    
    第12歩:Swaggarインターフェースのアドレスにアクセスする
    http://127.0.0.1:8080/Demo/api
    
    下図のように:
     
    マイクロサービスアーキテクチャの実戦編(三):Spring book t 2.0+Mybatisは添削と検索機能を実現します.jpg
  • ポート番号は自分で準
  • に設定しました.
    貢献者
  • IT実戦連盟-Line
  • IT実戦連盟-コーヒー
  • もっと素晴らしい内容は「IT実戦連盟」公団番号に注目できます.