SpringBoot学习:(三)Mybatis-Plus整合

Mybatis-Plus可通过代码自动生成实体类、Mapper、Service、Controller等
为了快速创建代码,可使用Mybatis-Plus帮我们自动创建

  1. 在POM中添加依赖
 <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>
        <!--代码生成-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!--代码生成使用的模版引擎-->
        <dependency>
            <groupId>com.ibeetl</groupId>
            <artifactId>beetl</artifactId>
            <version>2.9.3</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
  1. 创建一个代码生成器的类 创建一个自动生成器

     AutoGenerator autoGenerator = new AutoGenerator();
    
  2. 设置数据库链接配置,可根据数据库中的表来自动生成哪些表对应的类 ,并将配置放进autoGenerator中

    //配置数据库链接
    DataSourceConfig dataSourceConfig= new DataSourceConfig();
    dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ttt?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true");
    dataSourceConfig.setUsername("root");
    dataSourceConfig.setPassword("root");
    dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
    dataSourceConfig.setTypeConvert(new MySqlTypeConvert(){
        @Override
        public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
            //将数据库中的特殊类型转换成想要的类型
            //将数据库中datetime转换成DATE
            if ( fieldType.toLowerCase().contains("datetime") ) {
                return DbColumnType.DATE;
            }
            return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
        }
    });
    autoGenerator.setDataSource(dataSourceConfig);
    
  3. 公共配置 :配置项目的路径(用于生成文件时将文件生成的位置) ,设置文件生成是否覆盖,设置文件生成的名字样式等,并将配置放进autoGenerator中

    //公用配置
    GlobalConfig globalConfig= new GlobalConfig();
    globalConfig.setOutputDir(PROJECTPATH + "/src/main/java");
    globalConfig.setAuthor("xxx");
    //日期类型的字段使用哪个类型,默认是 java8的 日期类型,此处改为 java.util.date
    globalConfig.setDateType(DateType.ONLY_DATE);
    //是否覆盖 已存在文件,默认 false 不覆盖
    globalConfig.setFileOverride(true);
    //mapper.xml 是否生成 ResultMap,默认 false 不生成
    globalConfig.setBaseResultMap(true);
    //mapper.xml 是否生成 ColumnList,默认 false 不生成
    globalConfig.setBaseColumnList(true);
    globalConfig.setMapperName("%sMapper");
    globalConfig.setServiceName("%sService");
    globalConfig.setXmlName("%sMapper");
    autoGenerator.setGlobalConfig(globalConfig);
    
  4. 包配置:设置文件生成的具体包 比如实体类生成在基础包(com.test.swagger)下的bean包下,并将配置放进autoGenerator中

      PackageConfig pc = new PackageConfig();
      pc.setParent(PACKAGE);//设置基础包
      // pc.setModuleName("bean"); 子模块包名,最终生成的是类似  com.zhiyi.tiku.entity 这样的 不用写, 默认就是 entity
      pc.setEntity("bean");
      pc.setController("controller");
      pc.setService("service");
      pc.setMapper("mapper");
      autoGenerator.setPackageInfo(pc);
    
  5. 策略配置:设置命名方式,生成字段是否添加注解 ,是否启用 Lombok,并将配置放进autoGenerator中

      StrategyConfig strategy = new StrategyConfig();
       // 此处配置为 下划线转驼峰命名
       strategy.setNaming(NamingStrategy.underline_to_camel);
       //生成的字段 是否添加注解,默认false
       strategy.setEntityTableFieldAnnotationEnable(true);
       //表前缀,配置后 生成的的代码都会把前缀去掉
       strategy.setTablePrefix("t_");
       //是否启用 Lombok
       strategy.setEntityLombokModel(true);
       //是否启用 builder 模式 例:new DevDevice().setDealerId("").setDeviceCode("");
       strategy.setEntityBuilderModel(true);
       autoGenerator.setStrategy(strategy);
    
  6. 模板配置:可设置什么类生成 ,什么类不生成

       TemplateConfig templateConfig = new TemplateConfig();
       //不生成什么就设置为null值
        templateConfig.setController(null);
        templateConfig.setService(null);
        templateConfig.setServiceImpl(null);
        templateConfig.setMapper(null);
        templateConfig.setXml(null);
        autoGenerator.setTemplate(templateConfig);
    
  7. 模板引擎配置:MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。

      autoGenerator.setTemplateEngine(new BeetlTemplateEngine());
    
  8. 自动生成器执行

      autoGenerator.execute(); 
    

Mybatis-Plus学习路径:https://mp.baomidou.com/guide/

整体代码

package com.test.swagger;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.BeetlTemplateEngine;

public class CodeGenerator {

    /**
     * 获取项目目录
     */
    private static final String PROJECTPATH = System.getProperty("user.dir");
    /**
     * 项目基础包
     */
    private static final String PACKAGE = "com.test.swagger";

    public static void main(String[] args) {

        //自动生成器
        AutoGenerator autoGenerator = new AutoGenerator();
        //配置数据库链接
        DataSourceConfig dataSourceConfig= new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ttt?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setTypeConvert(new MySqlTypeConvert(){
            @Override
            public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                //将数据库中的特殊类型转换成想要的类型
                //将数据库中datetime转换成DATE
                if ( fieldType.toLowerCase().contains("datetime") ) {
                    return DbColumnType.DATE;
                }
                return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
            }
        });
        autoGenerator.setDataSource(dataSourceConfig);

        //公用配置
        GlobalConfig globalConfig= new GlobalConfig();
        globalConfig.setOutputDir(PROJECTPATH + "/src/main/java");
        globalConfig.setAuthor("xxx");
        //日期类型的字段使用哪个类型,默认是 java8的 日期类型,此处改为 java.util.date
        globalConfig.setDateType(DateType.ONLY_DATE);
        //是否覆盖 已存在文件,默认 false 不覆盖
        globalConfig.setFileOverride(true);
        //mapper.xml 是否生成 ResultMap,默认 false 不生成
        globalConfig.setBaseResultMap(true);
        //mapper.xml 是否生成 ColumnList,默认 false 不生成
        globalConfig.setBaseColumnList(true);
        globalConfig.setMapperName("%sMapper");
        globalConfig.setServiceName("%sService");
        globalConfig.setXmlName("%sMapper");
        autoGenerator.setGlobalConfig(globalConfig);

        PackageConfig pc = new PackageConfig();
        pc.setParent(PACKAGE);
       // pc.setModuleName("bean"); 子模块包名,最终生成的是类似  com.zhiyi.tiku.entity 这样的 不用写, 默认就是 entity
        pc.setEntity("bean");
        pc.setController("controller");
        pc.setService("service");
        pc.setMapper("mapper");
        autoGenerator.setPackageInfo(pc);

        StrategyConfig strategy = new StrategyConfig();
        // 此处配置为 下划线转驼峰命名
        strategy.setNaming(NamingStrategy.underline_to_camel);
        //生成的字段 是否添加注解,默认false
        strategy.setEntityTableFieldAnnotationEnable(true);
        //表前缀,配置后 生成的的代码都会把前缀去掉
        strategy.setTablePrefix("t_");
        //是否启用 Lombok
        strategy.setEntityLombokModel(true);
        //是否启用 builder 模式 例:new DevDevice().setDealerId("").setDeviceCode("");
        strategy.setEntityBuilderModel(true);
        autoGenerator.setStrategy(strategy);


        TemplateConfig templateConfig = new TemplateConfig();
        //不生成什么就设置为null值
        templateConfig.setController(null);
        templateConfig.setService(null);
        templateConfig.setServiceImpl(null);
        templateConfig.setMapper(null);
        templateConfig.setXml(null);
        autoGenerator.setTemplate(templateConfig);
        //使用beetl模版引擎
        autoGenerator.setTemplateEngine(new BeetlTemplateEngine());
        autoGenerator.execute();

    }
}


版权声明:本文为qq_43687987原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。