一、引入POM依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>8.0.30</version>
</dependency>
二、编写代码
2.1、官方文档
mybatis plus 代码生成器官方文档
2.2、编写代码
提供直接可以的代码,额外需要增加配置参考官方文档即可
package com.xx;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.xx.common.BaseEntity;
import java.util.Collections;
/**
* @author aqi
*/
public class CodeGenerator {
public static void main(String[] args) {
AutoGenerator generator = new AutoGenerator(dataSourceConfig());
generator
.global(globalConfig())
.packageInfo(packageConfig())
.strategy(strategyConfig()).execute();
}
private static DataSourceConfig dataSourceConfig() {
return new DataSourceConfig
.Builder("jdbc:mysql://127.0.0.1:3306/demo?serverTimezone=GMT%2b8&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false","root","root")
.dbQuery(new MySqlQuery())
.build();
}
/**
* 全局配置
*
* @return GlobalConfig
*/
private static GlobalConfig globalConfig() {
return new GlobalConfig.Builder()
// 指定输出目录
.outputDir(System.getProperty("user.dir") + "\\src\\main\\java")
// 作者名
.author("aqi")
// 开启 swagger 模式
.enableSwagger()
// 禁止打开目录
.disableOpenDir()
.build();
}
/**
* 包配置
*
* @return PackageConfig
*/
private static PackageConfig packageConfig() {
return new PackageConfig.Builder()
.parent("com.xx.demo")
// .moduleName("demo")
.entity("entity")
.service("service")
.serviceImpl("service.impl")
.mapper("mapper")
.xml("mapper.xml")
.controller("controller")
.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper"))
.build();
}
/**
* 策略配置
*
* @return StrategyConfig
*/
private static StrategyConfig strategyConfig() {
return new StrategyConfig.Builder()
.disableSqlFilter()
.addInclude("airlines_info")
// entity文件策略
.entityBuilder()
// 设置父类
.superClass(BaseEntity.class)
// 开启 lombok 模型
.enableLombok()
// 添加父类公共字段(这些字段将不在实体中生成)
.addSuperEntityColumns("create_time", "update_time")
// 全局主键类型
.idType(IdType.AUTO)
// 添加表字段填充
// .addTableFills(new Column("create_time", FieldFill.INSERT))
// .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
// 逻辑删除字段名(数据库)
.logicDeleteColumnName("deleted")
// controller文件策略
.controllerBuilder()
.enableRestStyle()
// service文件策略
.serviceBuilder()
.formatServiceFileName("%sService")
.build();
}
}
三、使用MybatisX生成代码
3.1、安装MybatisX插件
3.2、使用idea配置Database
3.3、使用生成代码
3.3.1、选择需要生成代码的表
3.3.2、配置代码生成路径、包名
配置项 | 说明 |
---|---|
module path | 代码生成模块 |
base package | 包路径 |
encoding | 文件编码格式 |
superClass | 生成实体类集成的父类 |
base path | 根路径,默认不需要修改 |
ignore field prefix | 忽略的字段前缀 |
ignore table prefix | 忽略的表前缀 |
relative package | 实体类所在包的名称 |
ignore field suffix | 忽略的字段后缀 |
ignore table suffix | 忽略的表后缀 |
extra class suffix | 增加实体类后缀 |
class name strategy | 类名生成测类额,camel:驼峰,same as tablename:和表名一样,默认为camel就可以 |
tableName | 带生成代码的表名 |
className | 生成的类名,可以直接修改 |
3.3.3、配置代码生成使用的模板
配置项 | 说明 |
---|---|
none | 不使用mybatis plus的模板 |
Mybatis-Plus 3 | 使用Mybatis plus 3版本的模板 |
Mybatis-Plus 2 | 使用Mybatis plus 2版本的模板 |
JPA | JPA模板 |
Comment | 增加表和字段注释,增加主键注解,建议勾选 |
toString/hashCode/equals | 生成toString/hashCode/equals方法,不推荐开启,直接使用Lombok即可 |
Lombok | 使用Lombok注解 |
Actual Column | 实体名称和表字段名称保持一致 |
Actual Column Annotation | 上面勾选了Mybatis-Plus 3这项配置没有作用 |
JSR310:Date API | 使用新的时间类,不开启datetime实体类映射为Date,开启之后映射为LocalDateTime |
Model | 是否生成实体类 |
custom-model-swagger | 生成swagger模板的字段注释,并且还会按照字段长度生成jsr303的字段校验注解 |
default-all | 不使用mybatis plus的模板, 生成mybatis的模板 |
default-empty | 只生成类,没有模板代码 |
mybatis-plus2 | 使用Mybatis plus 2版本的模板 |
mybatis-plus3 | 使用Mybatis plus 3版本的模板 |
四、总结
两种方式都可以生成代码,使用代码的方式更加灵活一些,代码也更加方便管理,使用插件更加快捷一点,也可以自定义修改插件模板,但是不方便团队维护