zoukankan      html  css  js  c++  java
  • spring-boot集成PageHelper和通用Mapper

    前提条件:已经集成mybatis

    代码生成步骤:

    1. 添加依赖
      <dependency>
          <groupId>tk.mybatis</groupId>
          <artifactId>mapper-spring-boot-starter</artifactId>
          <version>1.1.4</version>
      </dependency>
      <dependency>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-core</artifactId>
          <version>1.3.6</version>
      </dependency>
    2. 创建一个拥有main方法的类,代码如下
      package com.ghaien.generator;
      
      import org.mybatis.generator.api.MyBatisGenerator;
      import org.mybatis.generator.config.Configuration;
      import org.mybatis.generator.config.xml.ConfigurationParser;
      import org.mybatis.generator.internal.DefaultShellCallback;
      import sun.nio.cs.Surrogate.Generator;
      
      import java.util.ArrayList;
      import java.util.List;
      
      public class GeneratorMain {
          /**
           * 代码生成器
           * @param args
           * @throws Exception
           */
          public static void main(String[] args) throws Exception {
              List<String> warnings = new ArrayList<>();
              boolean overwrite = true;
              ConfigurationParser cp = new ConfigurationParser(warnings);
              Configuration config = cp.parseConfiguration(
                        Generator.class.getResourceAsStream("/generator/generatorConfig.xml"));
              DefaultShellCallback callback = new DefaultShellCallback(overwrite);
              MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
              myBatisGenerator.generate(null);
          }
      }
    3. 在上面代码中对应的目录下创建generatorConfig.xml配置文件
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE generatorConfiguration
              PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
              "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
      
      <generatorConfiguration>
          <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
      
              <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
                  <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
                  <!-- caseSensitive默认false,当数据库表名区分大小写时,可以将该属性设置为true -->
                  <property name="caseSensitive" value="true"/>
              </plugin>
      
              <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                              connectionURL="jdbc:mysql://localhost:3306/test"
                              userId="root"
                              password="1234">
              </jdbcConnection>
              <!--生成的实体类的存储路径和包名-->
              <javaModelGenerator targetPackage="com.ghaien.dao.pojo.vo" 
      targetProject
      ="E:documentIdeaProjectsspring-boot-demosrcmainjava"/> <!--生成的*Mapper.xml文件的存储位置--> <sqlMapGenerator targetPackage="mapper"
      targetProject
      ="E:documentIdeaProjectsspring-boot-demosrcmain esources"/> <!--生成的*Mapper.java文件的存储位置和包名--> <javaClientGenerator targetPackage="com.ghaien.dao.mapper"
      targetProject
      ="E:documentIdeaProjectsspring-boot-demosrcmainjava" type="XMLMAPPER" /> <!--对应数据库中表名(可以使用"%" 对应所有表)--> <table tableName="user" > <!--该表有一个id自增的主键,在生成实体类的时候会根据该配置生成相应的注解--> <generatedKey column="id" sqlStatement="Mysql" identity="true"/> </table> </context> </generatorConfiguration>

      以上配置可根据具体的需求进行配置

    4. 执行main方法

    集成步骤:

    1. 添加依赖
      <dependency>
          <groupId>tk.mybatis</groupId>
          <artifactId>mapper-spring-boot-starter</artifactId>
          <version>1.1.4</version>
      </dependency>
      <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper-spring-boot-starter</artifactId>
          <version>1.2.1</version>
      </dependency>
    2. application.properties中增加如下配置
      ##mapper
      ##mappers 多个接口时逗号隔开
      mapper.mappers=com.ghaien.utils.mapper.BaseMapper
      mapper.not-empty=false
      mapper.identity=MYSQL
      #
      ##pagehelper
      pagehelper.helperDialect=mysql
      pagehelper.reasonable=true
      pagehelper.supportMethodsArguments=true
      pagehelper.params=count=countSql
    3. 将生成的*Mapper.xml文件移动到application.properties中mybatis.mapperLocations对用的目录下,随意移动生成的实体类位置
    4. 创建BaseMapper(命名随意)接口,位置跟配置文件中的mapper.mappers对应,代码如下
      package com.ghaien.utils.mapper;
      
      import tk.mybatis.mapper.common.Mapper;
      import tk.mybatis.mapper.common.MySqlMapper;
      
      public interface BaseMapper<T> extends Mapper<T>, MySqlMapper<T> {
      }

      修改生成的*Mapper.java文件,使其继承BaseMapper,并移动到@MapperScan能扫描到的路径下,代码如下

      package com.ghaien.dao.mapper;
      
      import com.ghaien.dao.pojo.vo.User;
      import org.apache.ibatis.annotations.Param;
      import tk.mybatis.mapper.common.BaseMapper;
      
      public interface UserMapper extends BaseMapper<User> {
          /**
           * 测试UserMapper.xml文件路径是否正确
           * @param id
           * @return
           */
          User queryById(@Param("id") Long id);
      }

      注意:BaseMapper不能被@MapperScan扫描到

    5. 测试是否成功集成,代码如下
      package com.ghaien.dao.mapper;
      
      import com.ghaien.dao.pojo.vo.User;
      import com.github.pagehelper.Page;
      import com.github.pagehelper.PageHelper;
      import org.junit.Test;
      import org.junit.runner.RunWith;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.test.context.SpringBootTest;
      import org.springframework.test.context.junit4.SpringRunner;
      
      import java.util.List;
      
      /**
       * Created by ghaien on 2018/1/29.
       */
      @SpringBootTest
      @RunWith(SpringRunner.class)
      public class UserMapperTest {
      
          @Autowired
          private UserMapper userMapper;
      
          private Logger log = LoggerFactory.getLogger(this.getClass());
      
          @Test
          public void testQueryByPage() {
      //        PageHelper.startPage(2, 1);
      //        List<User> users = userMapper.selectAll();
      //        for (User user : users) {
      //            log.info("userName = " + user.getUserName());
      //        }
      
              Page<User> page = PageHelper.startPage(2, 1).doSelectPage(() -> {
                  userMapper.selectAll();
              });
              for (User user : page) {
                  log.info("userName = " + user.getUserName());
              }
          }
      
      }

      以上两种方法最后输出的结果是一致的,若想查看sql语句只需在配置文件中增加如下配置即可

      logging.level.com.ghaien.dao=debug

    完整代码

  • 相关阅读:
    5个最佳WordPress通知栏插件
    最新lombok插件和IDEA2020.1不兼容,Plugin "Lombok" is incompatible (until build 193.SNAPSHOT < IU-201.6668....
    nuxt中localstorage的替代方案
    nuxt或者vue,axios中如何发送多个请求
    wordpress nginx详细环境配置安装命令和相关问题解决
    [no_perms] Private mode enable, only admin can publish this module
    vue bootstrap中modal对话框不显示遮挡打不开
    vue监听当前页面的地址变化/路由变化
    来看看JDK13的81个新特性和API
    Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test java.lang.IllegalStateException
  • 原文地址:https://www.cnblogs.com/guohaien/p/8384050.html
Copyright © 2011-2022 走看看