持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
前言
AutoGenerator是MyBatis-Plus的代码生成器,通过AutoGenerator可以快速生成Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,极大的提升了开发效率。
mybtis plus的代码生成器有两个版本,根据使用的mybatis使用的版本不同可能需要的依赖不同。本次介绍是版本是3.5.1+。
创建子项目
工程的创建参考mybatis-plus 快速开始示例。在它的基础上再搭建的子工程。
在父工程xinxin-mybatis-plus-example中创建子项目xinxin-mybatis-plus-example-generator。创建过程同xinxin-mybatis-plus-example-crud。
引入依赖
新增了mybatis-plus-generator、velocity-engine-core、mysql-connector-java依赖。
- 先在父工程中增加依赖
<properties>
```
<mybatisplus.generator.version>3.5.2</mybatisplus.generator.version>
<velocity.version>2.3</velocity.version>
<mysql.version>8.0.15</mysql.version>
```
</properties>
<dependencyManagement>
<dependencies>
```
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatisplus.generator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
```
</dependencies>
</dependencyManagement>
- 子工程中引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
生成工具类
快速生成代码的工具类。
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import java.util.Collections;
public class FastAutoGeneratorUtil {
public static String dbUrl = "";
public static String dbUser = "";
public static String dbPassword = "";
static {
dbUrl = "jdbc:mysql://localhost:3306/vip?useUnicode=true&characterEncoding=utf8&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull";
dbUser = "root";
dbPassword = "123456";
}
public static void main(String[] args) {
// 获取当前资源路径 当前项目所在目录 /Users/jielingyang/IdeaProjects/i-workspace/xinxin-mybatis-plus-example
String projectPath = System.getProperty("user.dir");
// 数据库配置
FastAutoGenerator.create(dbUrl, dbUser, dbPassword)
// 全局配置
.globalConfig(builder -> {
builder.author("yang") // 设置作者
.disableOpenDir()
.dateType(DateType.ONLY_DATE)
.commentDate("yyyy-MM-dd HH:mm:ss")
// .enableSwagger() // 开启 swagger 模式
// .fileOverride() // 覆盖已生成文件 3.5.3会放弃该方法
.outputDir(projectPath + "/xinxin.mybatis-plus-example-generator/src/main/java"); // 指定输出目录
})
// 包配置
.packageConfig(builder -> {
builder.parent("com.xinxin.mybatis.plus.example.generator") // 设置父包名
.moduleName("sys") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "/xinxin.mybatis-plus-example-generator/src/main/resources/mapper")); // 设置mapperXml生成路径
})
// 策略配置
.strategyConfig(builder -> {
builder.addInclude("sys_region") // 设置需要生成的表名
.addTablePrefix("sys_"); // 设置过滤表前缀
})
// 模板配置
// .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
- 优化版代码
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
import java.util.function.Consumer;
public class FastAutoGeneratorUtil {
public static String dbUrl = "";
public static String dbUser = "";
public static String dbPassword = "";
public static String projectPath = "";
static {
dbUrl = "jdbc:mysql://localhost:3306/vip?useUnicode=true&characterEncoding=utf8&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull";
dbUser = "root";
dbPassword = "123456";
// 获取当前资源路径 当前项目所在目录 /Users/jielingyang/IdeaProjects/i-workspace/xinxin-mybatis-plus-example
projectPath = System.getProperty("user.dir");
}
/**
* 数据库配置 {@link com.xinxin.mybatis.plus.example.generator.codegenerator.FastAutoGeneratorUtil#datasourceBuilder()}
* 全局配置 {@link com.xinxin.mybatis.plus.example.generator.codegenerator.FastAutoGeneratorUtil#globalConfigConsumer()}
* 包配置 {@link com.xinxin.mybatis.plus.example.generator.codegenerator.FastAutoGeneratorUtil#packageConfigConsumer()}
* 策略配置 {@link com.xinxin.mybatis.plus.example.generator.codegenerator.FastAutoGeneratorUtil#strategyConfigConsumer()}
* 模板配置 {@link com.xinxin.mybatis.plus.example.generator.codegenerator.FastAutoGeneratorUtil#templateEngine()}
* 注入配置 {@link com.xinxin.mybatis.plus.example.generator.codegenerator.FastAutoGeneratorUtil#injectionConfigConsumer()}
*
* @see com.xinxin.mybatis.plus.example.generator.codegenerator.FastAutoGeneratorUtil#datasourceBuilder()
*
* @param args
*/
public static void main(String[] args) {
// 数据库配置
FastAutoGenerator.create(datasourceBuilder())
// 全局配置
.globalConfig(globalConfigConsumer())
// 包配置
.packageConfig(packageConfigConsumer())
// 策略配置
.strategyConfig(strategyConfigConsumer())
// 模板配置
// .templateEngine(templateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
// 注入配置
// .injectionConfig(injectionConfigConsumer())
.execute();
}
/**
* 数据库配置
* https://www.mybatis-plus.com/guide/generator-new.html#%E6%95%B0%E6%8D%AE%E5%BA%93%E9%85%8D%E7%BD%AE-datasourceconfig
*
* @return
*/
public static DataSourceConfig.Builder datasourceBuilder() {
return new DataSourceConfig.Builder(dbUrl, dbUser, dbPassword);
}
/**
* 全局配置 是数据配置下的一个小节 所以地址是数据库配置的地址 往下翻一点就是
* https://www.mybatis-plus.com/guide/generator-new.html#%E6%95%B0%E6%8D%AE%E5%BA%93%E9%85%8D%E7%BD%AE-datasourceconfig
*
* @return
*/
public static Consumer<GlobalConfig.Builder> globalConfigConsumer() {
return builder -> {
builder.author("yang") // 设置作者
.disableOpenDir()
.dateType(DateType.ONLY_DATE)
.commentDate("yyyy-MM-dd HH:mm:ss")
.outputDir(projectPath + "/xinxin.mybatis-plus-example-generator/src/main/java"); // 指定输出目录
};
}
/**
* 包配置
* https://www.mybatis-plus.com/guide/generator-new.html#%E5%8C%85%E9%85%8D%E7%BD%AE-packageconfig
*
* @return
*/
public static Consumer<PackageConfig.Builder> packageConfigConsumer() {
return builder -> {
builder.parent("com.xinxin.mybatis.plus.example.generator") // 设置父包名
.moduleName("sys") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "/xinxin.mybatis-plus-example-generator/src/main/resources/mapper")); // 设置mapperXml生成路径
};
}
/**
* 策略配置
* https://www.mybatis-plus.com/guide/generator-new.html#%E7%AD%96%E7%95%A5%E9%85%8D%E7%BD%AE-strategyconfig
*
* @return
*/
public static Consumer<StrategyConfig.Builder> strategyConfigConsumer() {
return builder -> {
builder.addInclude("sys_region") // 设置需要生成的表名
.addTablePrefix("sys_"); // 设置过滤表前缀
};
}
/**
* 模板配置
* https://www.mybatis-plus.com/guide/generator-new.html#%E6%A8%A1%E6%9D%BF%E9%85%8D%E7%BD%AE-templateconfig
*
* @return
*/
public static AbstractTemplateEngine templateEngine() {
return new FreemarkerTemplateEngine();
}
/**
* 注入配置
* https://www.mybatis-plus.com/guide/generator-new.html#%E6%B3%A8%E5%85%A5%E9%85%8D%E7%BD%AE-injectionconfig
*
* @return
*/
public static Consumer<InjectionConfig.Builder> injectionConfigConsumer() {
return builder -> {
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"));
};
}
}
以上就是快速生成基于mybatis plus的crud的java代码。mybatis plus还有很多定制化的代码生成配置,几乎涵盖了常见的代码生成需求。如果项目采用了mybatis plus框架,那么可以根据实际需求定制代码生成模板,为项目提供一个代码生成器项目,可以大大提高项目的开发效率,降低人力资源投入成本,希望能在以后工作中好好推广和学习。