【引言】
在前面的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 之後移除了代碼生成器與模板引擎的默認依賴,需要手動添加相關依賴:
<!-- 代碼生成配置 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.1</version>
</dependency>
<!-- spring boot 與 mybatis plus 集成starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
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版本有所不同,所以想自己動手實踐一把。過程中沒有遇到什麼錯誤,依照着文檔很順利完成了,也算是又一次豐富了自己的知識積累。