AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
1.导入依赖 ,需要引用的依赖如下
com.baomidou
mybatis-plus-generator
3.4.0
org.apache.velocity
velocity-engine-core
2.3
mysql
mysql-connector-java
8.0.26
runtime
ch.qos.logback
logback-classic
1.2.6
test
<--
org.slf4j
slf4j-simple
2.0.0-alpha5
test
-->
2.编写工具类
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
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.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
/**
* mybatis-plus代码自动生成器
*/
public class MyAutoGenerator {
// 数据库链接参数
private static String DriverClassName = "com.mysql.cj.jdbc.Driver";
private static String UserName = "root";
private static String PassWord = "root";
private static String Url = "jdbc:mysql://127.0.0.1:3306/blogs?characterEncoding=UTF-8&serverTimezone=UTC";
public static void main(String[] args) {
// 1.构建代码生成器对象
AutoGenerator ag = new AutoGenerator();
// 配置策略
// 1.1 配置数据源
DataSourceConfig ds = new DataSourceConfig();
// 设置数据库类型 如果是其他数据库类型此处需要修改
ds.setDbType(DbType.MYSQL);
ds.setDriverName(DriverClassName);
ds.setUsername(UserName);
ds.setUrl(Url);
ds.setPassword(PassWord);
ag.setDataSource(ds);
//1.2 全局配置
GlobalConfig gc = new GlobalConfig();
//设置生成的文件输出的父目录为当前项目的src/main/java
gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
//设置作者
gc.setAuthor("MonsterX");
// 生成swagger2注解
gc.setSwagger2(true);
// 文件已存在是否覆盖
gc.setFileOverride(false);
// 不打开生成的文件输出目录
gc.setOpen(false);
// 设置ID生成策略
gc.setIdType(IdType.ASSIGN_ID);
// service生成比如表名是user 那么生成的就是UserService
gc.setServiceName("%sService");
// 使用java.util包下的date
gc.setDateType(DateType.ONLY_DATE);
ag.setGlobalConfig(gc);
//1.3 包的配置
PackageConfig pc = new PackageConfig();
// 父包名 src/main/java 目录下的包名 src/main/java/com/monstor
pc.setParent("com.monster");
// 父包模块名称 src/main/java/com/monstor/blog
pc.setModuleName("blog");
// controller包名 src/main/java/com/monstor/blog/controller
// 不设置 默认就是controller
pc.setController("controller");
// entity包名 src/main/java/com/monstor/blog/pojo
// 不设置 默认就是entity
pc.setEntity("pojo");
// mapper接口包名 src/main/java/com/monstor/blog/mapper
// 不设置 默认就是mapper
pc.setMapper("mapper");
// service接口包名 src/main/java/com/monstor/blog/service
// 不设置 默认就是service
pc.setService("service");
// serviceImpl包名 src/main/java/com/monstor/blog/service/impl
// 不设置 默认就是service包下面的impl包
pc.setServiceImpl("service.impl");
ag.setPackageInfo(pc);
// 1.4策略配置
StrategyConfig sc = new StrategyConfig();
// 设置要生成的表,多个以逗号隔开
sc.setInclude("comments", "system_info");
// 字段名称开启驼峰命名
sc.setColumnNaming(NamingStrategy.underline_to_camel);
// 表名开启驼峰命名
sc.setNaming(NamingStrategy.underline_to_camel);
// 开启lombok支持
sc.setEntityLombokModel(true);
// 设置逻辑删除字段 如果表中没有该字段 不设置
sc.setLogicDeleteFieldName("deleted");
// 自动填充配置 如果表中没有这些字段会跳过 不影响使用 也可以不配置
TableFill gmtCreate = new TableFill("create_time", FieldFill.INSERT);
TableFill gmtmodified = new TableFill("update_time", FieldFill.INSERT_UPDATE);
ArrayList tableFills = new ArrayList<>();
tableFills.add(gmtCreate);
tableFills.add(gmtmodified);
sc.setTableFillList(tableFills);
// 乐观锁字段 如果表中没有这些字段会跳过 不影响使用 也可以不配置
sc.setVersionFieldName("version");
// 使用@RestController
sc.setRestControllerStyle(true);
// 开启驼峰转连接符 @RequestMapping("/managerUserActionHistory") ---> @RequestMapping("/manager-user-action-history")
sc.setControllerMappingHyphenStyle(true);
ag.setStrategy(sc);
ag.execute();
}
}
3.生成工具中需要修改的地方
1>.数据库的配置需要修改成你自己要连的数据库.
2>.全局配置中基本上就是修改一下作者就可以了,ID的生成策略上面配置的是ASSIGN_ID(全局唯一),内部使用雪花算法生成.如果需要修改,可以下源码查看其他策略.
3>.包的配置需要修改父包名以及父包模块名称,实体类的包名也可以修改成你习惯的,其余的可以不设置,都是有默认值的.需要修改才设置.
4>.策略的配置比较麻烦,主要修改的有要映射的表名,其余的采用默认配置就可以.如果有逻辑删除字段,或者需要自动填充配置(比如创建时间,修改时间之类的字段) 需要手动设置一下.
需要注意的的是我们上面生成代码的时候开启了swagger2的支持,lombok支持,还有一些spring的注解,如果没有依赖这些包,依然是能够生成成功的,只不过是生成出来的代码会报错,找不到依赖.再导入依赖就可以了
还需要注意的是,如果数据库的字段没有注释,那么生成的实体类上就不会有swagger的注解,所以尽量给数据库字段都加上注释.
生成的代码结构如下:
这里的mapper.xml没法配置到resourses目录下面去,生成在mapper目录下,需要手动移到resources目录下.
这里的报错是因为我新建的一个maven项目来演示,所以只依赖了上面导入的几个依赖,没有导入spring,lombok和swagger相关的依赖.
mybatis-plus代码生成器在3.5.1+版本不适用上面的生成代码,具体查看官方文档代码生成器(3.5.1+版本) | MyBatis-Plus为简化开发而生https://mp.baomidou.com/guide/generator-new.html