写点什么

MyBatisPlus(四、代码生成器)

作者:
  • 2022 年 9 月 18 日
    河南
  • 本文字数:4249 字

    阅读完需:约 14 分钟

MyBatisPlus(四、代码生成器)

一、旧版本

注意

适用版本:mybatis-plus-generator 3.5.1 以下版本


  AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速根据数据表自动生成实体类、Mapper、Service、ServiceImpl、Controller 等各个模块的代码,极大的提升了开发效率。

1、添加模板引擎依赖

  添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。


Velocity(默认):


<dependency>    <groupId>org.apache.velocity</groupId>    <artifactId>velocity-engine-core</artifactId>    <version>最新版本</version></dependency>
复制代码


Freemarker:


<dependency>    <groupId>org.freemarker</groupId>    <artifactId>freemarker</artifactId>    <version>最新版本</version></dependency>
复制代码


Beetl:


<dependency>    <groupId>com.ibeetl</groupId>    <artifactId>beetl</artifactId>    <version>最新版本</version></dependency>
复制代码


我们选用默认的

2、添加 generator 依赖

在 pom.xml 导入 MyBatis Plus Generator 的依赖


<dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-generator</artifactId>    <version>3.3.1.tmp</version></dependency>
<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version></dependency>
复制代码

3、编写生成器代码

1、配置 GlobalConfig


这里是生成的位置作者


GlobalConfig globalConfig = new GlobalConfig();globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");globalConfig.setAuthor("jobob");globalConfig.setOpen(false);
复制代码


2、DataSourceConfig


这里是数据库的连接信息


DataSourceConfig dataSourceConfig = new DataSourceConfig();dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8");dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");dataSourceConfig.setUsername("root");dataSourceConfig.setPassword("password");
复制代码


详细代码如下:


package com.example.mybatisplus;
import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.config.DataSourceConfig;import com.baomidou.mybatisplus.generator.config.GlobalConfig;import com.baomidou.mybatisplus.generator.config.PackageConfig;import com.baomidou.mybatisplus.generator.config.StrategyConfig;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class Main {
public static void main(String[] args) { //1、创建generator对象 AutoGenerator autoGenerator = new AutoGenerator(); //数据源 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MYSQL); dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("root"); dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); autoGenerator.setDataSource(dataSourceConfig); //设置数据源 //2、全局配置 GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java"); globalConfig.setOpen(false); //是否打开输出目录 globalConfig.setAuthor("xmp"); //作者 globalConfig.setServiceName("%sService"); //设置生成的service接口的名字不带I autoGenerator.setGlobalConfig(globalConfig); //设置全局配置 //3、包信息 PackageConfig packageConfig = new PackageConfig(); //包配置 packageConfig.setParent("com.example.mybatisplus"); //设置父包名 packageConfig.setModuleName("generator"); // 设置子包名 packageConfig.setController("controller"); //设置控制器包名 packageConfig.setService("service"); packageConfig.setServiceImpl("service.impl"); packageConfig.setMapper("mapper"); packageConfig.setEntity("entity"); autoGenerator.setPackageInfo(packageConfig); //设置包配置 //4、配置策略 StrategyConfig strategyConfig = new StrategyConfig(); //策略配置 strategyConfig.setEntityLombokModel(true); //是否使用lombok strategyConfig.setNaming(NamingStrategy.underline_to_camel); //数据库表映射到实体的命名策略 strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); //数据库表字段映射到实体的命名策略 autoGenerator.setStrategy(strategyConfig); //设置策略配置
autoGenerator.execute(); //执行生成
}
}
复制代码

4、效果


二、新版本

1、导入依赖

<dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-generator</artifactId>    <version>最新版本</version></dependency>
复制代码


注意

当前包未传递依赖 MP 包、mysql 等,需要自己引入!

2、快速生成

FastAutoGenerator.create("url", "username", "password")    .globalConfig(builder -> {        builder.author("baomidou") // 设置作者            .enableSwagger() // 开启 swagger 模式            .fileOverride() // 覆盖已生成文件            .outputDir("D://"); // 指定输出目录    })    .packageConfig(builder -> {        builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名            .moduleName("system") // 设置父包模块名            .pathInfo(Collections.singletonMap(OutputFile.xml, "D://")); // 设置mapperXml生成路径    })    .strategyConfig(builder -> {        builder.addInclude("t_simple") // 设置需要生成的表名            .addTablePrefix("t_", "c_"); // 设置过滤表前缀    })    .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板    .execute();
复制代码

3、交互式生成

FastAutoGenerator.create(DATA_SOURCE_CONFIG)    // 全局配置    .globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称?")).fileOverride())    // 包配置    .packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))    // 策略配置    .strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))                        .controllerBuilder().enableRestStyle().enableHyphenStyle()                        .entityBuilder().enableLombok().addTableFills(                                new Column("create_time", FieldFill.INSERT)                        ).build())    /*        模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker       .templateEngine(new BeetlTemplateEngine())       .templateEngine(new FreemarkerTemplateEngine())     */    .execute();

// 处理 all 情况protected static List<String> getTables(String tables) { return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));}
复制代码

4、配置

1、DataSourceConfig


基础配置



new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")    .build();
复制代码


可选配置


new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")    .dbQuery(new MySqlQuery())    .schema("mybatis-plus")    .typeConvert(new MySqlTypeConvert())    .keyWordsHandler(new MySqlKeyWordsHandler())    .build();
复制代码


2、GlobalConfig



new GlobalConfig.Builder()    .fileOverride()    .outputDir("/opt/baomidou")    .author("baomidou")    .enableKotlin()    .enableSwagger()    .dateType(DateType.TIME_PACK)    .commentDate("yyyy-MM-dd")    .build();
复制代码


3、PackageConfig



new PackageConfig.Builder()    .parent("com.baomidou.mybatisplus.samples.generator")    .moduleName("sys")    .entity("po")    .service("service")    .serviceImpl("service.impl")    .mapper("mapper")    .xml("mapper.xml")    .controller("controller")    .other("other")    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))    .build();
复制代码


4、TemplateConfig



new TemplateConfig.Builder()    .disable(TemplateType.ENTITY)    .entity("/templates/entity.java")    .service("/templates/service.java")    .serviceImpl("/templates/serviceImpl.java")    .mapper("/templates/mapper.java")    .mapperXml("/templates/mapper.xml")    .controller("/templates/controller.java")    .build();
复制代码


5、InjectionConfig



new InjectionConfig.Builder()    .beforeOutputFile((tableInfo, objectMap) -> {        System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());    })    .customMap(Collections.singletonMap("test", "baomidou"))    .customFile(Collections.singletonMap("test.txt", "/templates/test.vm"))    .build();
复制代码


6、StrategyConfig



其他具体详细配置参考:https://baomidou.com/pages/981406/#service-%E7%AD%96%E7%95%A5%E9%85%8D%E7%BD%AE

发布于: 2022 年 09 月 18 日阅读数: 55
用户头像

关注

在校大三学生一枚 2022.08.02 加入

喜欢学习编程,擅长技术栈JAVA

评论

发布
暂无评论
MyBatisPlus(四、代码生成器)_Mybatis-Plus_斯_InfoQ写作社区