mybatis plus 代码生成器
- 依赖 3.0.5 之前的
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.7.1</version>
</dependency>
public class Code {
public static void main(String[] args) {
// 需要构建一个 代码自动生成器 对象
AutoGenerator mpg = new AutoGenerator();
// 配置策略
// 1、全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath+"/src/main/java");
gc.setAuthor("qiqi");
gc.setOpen(false);
gc.setFileOverride(false); // 是否覆盖
gc.setServiceName("%sService"); // 去Service的I前缀
gc.setIdType(IdType.ID_WORKER);
gc.setDateType(DateType.ONLY_DATE);
gc.setSwagger2(true);
mpg.setGlobalConfig(gc);
//2、设置数据源
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("xxxx");
dsc.setPassword("xxxxx");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
//3、包的配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("blog");
pc.setParent("com.qiqi");
pc.setEntity("entity");
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
mpg.setPackageInfo(pc);
//4、策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("user"); // 设置要映射的表名
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true); // 自动lombok;
strategy.setLogicDeleteFieldName("deleted");
// 自动填充配置
TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(gmtCreate);
tableFills.add(gmtModified);
strategy.setTableFillList(tableFills);
// 乐观锁
strategy.setVersionFieldName("version");
strategy.setRestControllerStyle(true);
strategy.setControllerMappingHyphenStyle(true); // localhost:8080/hello_id_2
mpg.setStrategy(strategy);
mpg.execute(); //执行
}
}
- 依赖 3.0.5 以上的
<!-- 依赖 -->
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator -->
<!-- 代码自动生成的依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
public class Code {
public static void main(String[] args) {
// 数据库连接配置
String url = "jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true";
String username = "xxxx";
String password = "xxxx";
// 需要生成的表名
List<String> table = new ArrayList<>();
table.add("user");
FastAutoGenerator.create(url,username,password)
// 全局配置
.globalConfig(builder -> {
builder.disableOpenDir() // 禁止打开 window 的命令管理
/**
* System.getProperty("user.dir"):
* 1.默认定位到的当前用户目录("user.dir")(即工程根目录)
* 2.JVM就可以据"user.dir" + "你自己设置的目录" 得到完整的路径(即绝对路径)
*
* 指定输出目录
*/
.outputDir(System.getProperty("user.dir") + "\\src\\main\\java")
.author("qiqi") //作者名
.enableSwagger() // 开启 swagger
.dateType(DateType.TIME_PACK) // 时间策略
.commentDate("yyyy-MM-dd") // 注释日期
.fileOverride(); // 覆盖已有的文件
})
// 包配置
.packageConfig(builder -> {
builder.parent("com.lw.cehsi") // 父包名
.entity("pojo") // 实体类包名
.service("service") // service 包名
.serviceImpl("service.impl") // service impl 包名
.mapper("mapper") // mapper 包名
.xml("mapper.xml") // mapper xml 包名
.controller("controller") // controller 包名
.other("conifg") // 自定义配置包名
.pathInfo(Collections.singletonMap(OutputFile.xml,System.getProperty("user.dir") + "\\src\\main\\resources\\mapper")); // 指定 xml 位置
})
// 策略配置
.strategyConfig(builder -> {
builder.addInclude(table)
.addTablePrefix("")//表名前缀,配置后生成的代码不会有此前缀
.serviceBuilder()
.formatServiceFileName("%sService")//服务层接口名后缀
.formatServiceImplFileName("%sServiceImpl")//服务层实现类名后缀
.entityBuilder()
.enableLombok()//实体类使用lombok,需要自己引入依赖
.logicDeleteColumnName("status")//逻辑删除字段,使用delete方法删除数据时会将status设置为1。调用update方法时并不会将该字段放入修改字段中,而是在条件字段中
.enableTableFieldAnnotation()//加上字段注解@TableField
.controllerBuilder()
.formatFileName("%sController")//控制类名称后缀
.enableRestStyle()
.mapperBuilder()
.superClass(BaseMapper.class)
.formatMapperFileName("%sMapper")
.enableMapperAnnotation()
.formatXmlFileName("%sMapper");
})
.execute();
}
}
视频讲解参考b站遇见狂神说:https://www.bilibili.com/video/BV17E411N7KN?p=15&vd_source=ee1e871eac7f901c7656b4d5a3c4f24b