spring-boot-mybatis-generator-page

Spring-boot-mybatis-generator-page

Spring-boot-mybatis-generator

with java api

  1. 在src/main/resources目录下创建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="MyBatis3">
        <plugin type="org.mybatis.generator.plugins.FluentBuilderMethodsPlugin"/>
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <plugin type="org.mybatis.generator.plugins.RowBoundsPlugin"/>
    
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
          connectionURL="jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;autoReconnect=true&amp;failOverReadOnly=false&amp;serverTimezone=GMT%2B8&amp;nullCatalogMeansCurrent=true"
          userId="root"
          password="Gepoint">
        </jdbcConnection>
    
        <javaModelGenerator targetPackage="com.shawn.spring.boot.mybatis.entity"
          targetProject="./src/main/java">
          <property name="enableSubPackages" value="true"/>
          <property name="trimStrings" value="true"/>
        </javaModelGenerator>
    
        <sqlMapGenerator targetPackage="com.shawn.spring.boot.mybatis.mapper"
          targetProject="./src/main/resources/mapper">
          <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
    
        <javaClientGenerator type="MIXEDMAPPER"
          targetPackage="com.shawn.spring.boot.mybatis.mapper"
          targetProject="./src/main/java">
          <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
    
        <table tableName="t_menu" domainObjectName="Menu">
          <generatedKey column="menu_id" sqlStatement="SELECT LAST_INSERT_ID()" identity="true"/>
        </table>
    
        <table tableName="t_user" domainObjectName="User">
          <generatedKey column="user_id" sqlStatement="SELECT LAST_INSERT_ID()" identity="true"/>
        </table>
    
        <table tableName="t_role" domainObjectName="Role">
          <generatedKey column="role_id" sqlStatement="SELECT LAST_INSERT_ID()" identity="true"/>
        </table>
      </context>
    </generatorConfiguration>
    
  2. pom.xml

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.0.0</version>
    </dependency>
    
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.7</version>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
    </dependency>
    
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    
  3. java code

    List<String> warnings = new ArrayList<>();
    ConfigurationParser cp = new ConfigurationParser(warnings);
    Configuration config = cp.parseConfiguration(
        this.getClass().getResourceAsStream("/generatorConfig.xml"));
    // 是否覆盖
    DefaultShellCallback callback = new DefaultShellCallback(true);
    MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
    myBatisGenerator.generate(null);
    

with maven plugin

  1. 在src/main/resources目录下创建generatorConfig.xml(同上)

  2. pom.xml

    <dependencies>
      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
      </dependency>
      <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
      </dependency>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
      </dependency>
    </dependencies>
    
    <build>
      <plugins>
        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.7</version>
          <executions>
            <execution>
                <!-- plugin name -->
              <id>mybatis-generator</id>
              <goals>
                  <!-- 指令 -->
                <goal>generate</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <overwrite>true</overwrite>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>8.0.13</version>
            </dependency>
          </dependencies>
        </plugin>
      </plugins>
    </build>
    
  3. 执行Maven指令

    mvn [plugin-name]:[goal-name]
    mvn mybatis-generator:generate
    

注意点:

  1. 如果使用的是mysql-connector-java的版本是8以上,generatorConfig.xml里的jdbc.url需要加上参数nullCatalogMeansCurrent=true,不加上的话会识别不了表的主键。这样就不会生成selectByPrimaryKey这样的方法。

  2. 生成的mapper类,不会带上

    @Mapper
    @Repository
    

    这两个注解,建议加上

  3. <generatedKey column="user_id" sqlStatement="SELECT LAST_INSERT_ID()" identity="true"/>其中sqlStatement的配置可以参考Mybatis的官方文档

mybatis官网

Spring-boot-mybatis-pageHelper

  1. pom.xml

      <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
      </dependency>
    
  2. application.yaml

    spring.datasource.url: jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
    spring.datasource.username: root
    spring.datasource.password: 11111
    spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver
    
    mybatis.configuration.map-underscore-to-camel-case: true
    mybatis.mapper-locations: classpath:mapper/**/*.xml
    mybatis.type-aliases-package: com.shawn.spring.boot.mybatis.entity
    mybatis.type-handlers-package: com.shawn.spring.boot.mybatis.handle
    
    pagehelper.offset-as-page-num: true
    pagehelper.reasonable: true
    pagehelper.page-size-zero: true
    pagehelper.support-methods-arguments: true
    
  3. mapper

    @Select("select * from t_user order by user_id")
    @ResultMap("com.shawn.spring.boot.mybatis.mapper.UserMapper.BaseResultMap")
    List<User> selectAll();
    
    @Select("select * from t_user order by user_id")
    @ResultMap("com.shawn.spring.boot.mybatis.mapper.UserMapper.BaseResultMap")
    List<User> selectWithRowBounds(RowBounds rowBounds);
    
    @Select("select * from t_user order by user_id")
    @ResultMap("com.shawn.spring.boot.mybatis.mapper.UserMapper.BaseResultMap")
    List<User> selectWithParams(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize);
    
  4. service

      @Override
      public PageInfo<User> findWithPageHelper(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<User> userList = userMapper.selectAll();
        PageInfo<User> pageInfo = new PageInfo(userList);
        return pageInfo;
      }
    
      @Override
      public PageInfo<User> findWithRowBounds(int pageNum, int pageSize) {
        List<User> users = userMapper.selectWithRowBounds(new RowBounds(pageNum, pageSize));
        PageInfo<User> pageInfo = new PageInfo(users);
        return pageInfo;
      }
    
      @Override
      public PageInfo<User> findWithParams(int pageNum, int pageSize) {
        List<User> users = userMapper.selectWithParams(pageNum, pageSize);
        PageInfo<User> pageInfo = new PageInfo(users);
        return pageInfo;
      }
    
  5. test case

    public void testPageQuery() {
      PageInfo<User> withPageHelper = userService.findWithPageHelper(1, 10);
      log.info("withPageHelper: {}", withPageHelper);
    
      PageInfo<User> withRowBounds = userService.findWithRowBounds(1, 10);
      log.info("withRowBounds: {}", withRowBounds);
    
      PageInfo<User> withParams = userService.findWithParams(1, 10);
      log.info("withParams: {}", withParams);
    }
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355