Mybatis-plus<一> Springboot框架使用MybatisPlus代碼自動生成器
Mybatis-plus官網: https://mp.baomidou.com/
Demo GitHub下載地址(包含數據庫建表sql,數據庫數據與源代碼):https://github.com/RJvon/Mybatis_plus_demo
未經作者同意請勿轉載
Mybatis-plus簡介
MyBatis-Plus (簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。
AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個模塊的代碼,極大的提升了開發效率。
MP 提供了大量的自定義設置,生成的代碼完全能夠滿足各類型的需求
MP 的代碼生成器 和 Mybatis MBG 代碼生成器: MP 的代碼生成器都是基於 java 代碼來生成。MBG 基於 xml 文件進行代碼生成 MyBatis 的代碼生成器可生成: 實體類、Mapper 接口、Mapper 映射文件 MP 的代碼生成器可生成: 實體類(可以選擇是否支持 AR)、Mapper 接口、Mapper 映射文件、 Service 層、Controller 層.
表及字段命名策略選擇 在 MP 中,我們建議數據庫表名 和 表字段名采用駝峰命名方式, 如果采用下划 線命名方式 請開啟全局下划線開關,如果表名字段名命名方式不一致請注解指定,我們建議最好保持一致。
這么做的原因是為了避免在對應實體類時產生的性能損耗,這樣字段不用做映射就能直接和實體類對應。當然如果項目里不用考慮這點性能損耗,那么你采用下滑線也是沒問題的,只需要在生成代碼時配置 dbColumnUnderline 屬性就可以 。
新建Springboot項目,導入相關依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
</dependencies>
在數據庫中建一個表
Demo GitHub下載地址:https://github.com/RJvon/Mybatis_plus_demo(數據庫建表sql與源代碼)
數據庫:New_employees
新員工表:Employees
create database New_employees default charset utf8;
create table Employees
(
id integer not null,
name varchar(20) not null,
sex bit default 1,
birth datetime not null,
tel char(11),
school varchar(255),
primary key (id)
);
insert into Employees values
(101, '趙清華',1, '1996-5-5', '14894728324','清華大學'),
(102, '錢北大',1, '1997-6-6','14894728321', '北京大學'),
(103, '孫復旦',1, '1996-7-7', '14894728322','復旦大學'),
(104, '李交通',0, '1999-8-8', '14894728323','上海交通大學'),
(105, '周浙大',1, '1995-9-9', '14894728325','浙江大學'),
(106, '吳中科',1, '1997-10-10','14894728326', '中國科學技術大學'),
(107, '鄭南京',0, '1983-11-11', '14894728327','南京大學'),
(108, '王人民',1, '1999-12-12', '14894728328','中國人民大學'),
(1001, '趙清',1, '1996-5-5', '14894728324','清華大學'),
(1002, '錢北',1, '1997-6-6','14894728321', '北京大學'),
(1003, '孫復',1, '1996-7-7', '14894728322','復旦大學'),
(1004, '李交',0, '1999-8-8', null,'上海交通大學'),
(1005, '周浙',1, '1995-9-9', '14894728325','浙江大學'),
(1006, '吳中',1, '1997-10-10','14894728326', '中國科學技術大學'),
(1007, '鄭南',0, '1983-11-11', '14894728327','南京大學'),
(1008, '王人',1, '1999-12-12', '14894728328','中國人民大學');
代碼自動生成器代碼:
package com.von.demo;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.*;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.FileType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @author xueqing f
* @version 1.0
* @date 2021/7/31 16:33
* Demo GitHub下載地址:https://github.com/RJvon/Mybatis_plus_demo(數據庫建表sql與源代碼)
*/
public class CodeGenerator {
/**
* <p>
* 讀取控制台內容
* </p>
*/
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("請輸入" + tip + ":");
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("請輸入正確的" + tip + "!");
}
public static void main(String[] args) {
// 代碼生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("xueqing");
gc.setOpen(false);
// gc.setSwagger2(true); 實體屬性 Swagger2 注解
mpg.setGlobalConfig(gc);
// 數據源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/New_employees?serverTimezone=GMT%2B8&useSSL=true");
// dsc.setSchemaName("public");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(scanner("module"));
pc.setParent("com.von.demo");
mpg.setPackageInfo(pc);
// 自定義配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
/*// 如果模板引擎是 velocity
String templatePath = "/templates/mapper.xml.vm";*/
// 自定義輸出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定義配置會被優先輸出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定義輸出文件名 , 如果你 Entity 設置了前后綴、此處注意 xml 的名稱會跟着發生變化!!
return projectPath + "/src/main/resources/mapper/"
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
// 寫於父類中的公共字段
// strategy.setSuperEntityColumns("id");
strategy.setInclude(scanner("表名,多個英文逗號分割").split(","));
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix("_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
運行CodeGenerator:

生成的代碼結構:

