【引言】
在前面的spring boot与mybatis plus 集成的相关博客中,用的是2.x的版本,而mybatis plus已经发布3.1.x版本,所以,参照着官方文档,将集成spring boot应用,实践下代码自动生成。
【核心源码】
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
生成的核心方法是execute,源代码如下:
public void execute() {
logger.debug("==========================准备生成文件...==========================");
if (null == this.config) {
this.config = new ConfigBuilder(this.packageInfo, this.dataSource, this.strategy, this.template, this.globalConfig);
if (null != this.injectionConfig) {
this.injectionConfig.setConfig(this.config);
}
}
if (null == this.templateEngine) {
this.templateEngine = new VelocityTemplateEngine();
}
this.templateEngine.init(this.pretreatmentConfigBuilder(this.config)).mkdirs().batchOutput().open();
logger.debug("==========================文件生成完成!!!==========================");
}
代码生成主要配置以下几项即可:
// 数据源配置
private DataSourceConfig dataSource;
// 策略配置
private StrategyConfig strategy;
// 包配置
private PackageConfig packageInfo;
// 模板配置
private TemplateConfig template;
// 全局配置
private GlobalConfig globalConfig;
【实现步骤】
1. 添加依赖
MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:
com.baomidou
mybatis-plus-generator
3.1.1
com.baomidou
mybatis-plus-boot-starter
3.1.1
org.freemarker
freemarker
2.3.28
2. 全局配置
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
// 配置代码输出目录
gc.setOutputDir(projectPath + "/src/main/java");
// 配置作者
gc.setAuthor("huzhiting");
gc.setOpen(false);
// gc.setSwagger2(true); 实体属性 Swagger2 注解
3. 数据源配置
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/demo?useUnicode=true&useSSL=false&characterEncoding=utf8");
// dsc.setSchemaName("public");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
4. 包配置
// 包配置
PackageConfig pc = new PackageConfig();
//pc.setModuleName(scanner("模块名"));
pc.setParent("com.example.mybatisplus");
mpg.setPackageInfo(pc);
上述代码中如果设置模块名,则生成的代码是按模块分的;结构如下:
src
└── main
├── java
│ └── com
│ └── example
│ └── mybatisplus
│ ├── Application.java
│ ├── region
│ │ └── controller
│ │ ├── RegionController.java
│ │ └── service
│ │ └── impl
│ │ ├── RegionServiceImpl.java
│ │ ├── IRegionService.java
│ │ └── mapper
│ │ ├── RegionMapper.java
│ │ └── entity
│ │ ├── Region.java
│ ├── user
│ │ └── controller
│ │ ├── UserController.java
│ │ └── service
│ │ └── impl
│ │ ├── UserServiceImpl.java
│ │ ├── IUserService.java
│ │ └── mapper
│ │ ├── UserMapper.java
│ │ └── entity
│ │ ├── User.java
└── resources
├── application.properties
└── mapper
├── region
│ └── RegionMapper.xml
├── user
│ └── UserMapper.xml
不设置则是各个模块的各层代码在同一个包下,结构如下:
src
└── main
├── java
│ └── com
│ └── example
│ └── mybatisplus
│ ├── Application.java
│ ├── controller
│ │ └── RegionController.java
│ │ └── UserController.java
│ ├── service
│ │ ├── impl.java
│ │ └── RegionServiceImpl.java
│ │ └── UserServiceImpl.java
│ │ └── IRegionService.java
│ │ └── IUserService.java
│ ├── mapper
│ │ └── RegionMapper.java
│ │ └── UserMapper.java
│ ├── entity
│ │ └── Region.java
│ │ └── User.java
└── resources
├── application.properties
└── mapper
└── RegionMapper.xml
└── UserMapper.xml
通过以上包配置,便可根据以往的项目习惯自行配置项目目录结构。
5. 策略配置
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// 命名规则
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//strategy.setSuperEntityClass("com.example.mybatisplus.common.BaseEntity");
// 实体是否使用Lombok插件
strategy.setEntityLombokModel(true);
// 控制层是否使用Rest风格
strategy.setRestControllerStyle(true);
//strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");
strategy.setInclude(scanner("表名").split(","));
strategy.setSuperEntityColumns("id");
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix(pc.getModuleName() + "_");
通过以上添加依赖和相关配置的所有步骤,便可成功自动生成代码,控制台打印信息如下:
生成的代码在项目中的目录结构如下:
完整代码以上传至github,地址如下:
https://github.com/huzhiting/spring-boot-mybatisplus-3.1.x
【总结】
最近接触的新项目用的是3.1.x版本,在使用自动生成代码一套东西发现和之前自己使用2.x版本有所不同,所以想自己动手实践一把。过程中没有遇到什么错误,依照着文档很顺利完成了,也算是又一次丰富了自己的知识积累。