MyBatisPlus代碼生成器實(shí)踐(自己二次封裝)
前提準(zhǔn)備
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>核心配置
前提說(shuō)明
你只需要配置一下內(nèi)容之后即可按照指定內(nèi)容來(lái)進(jìn)行生成代碼:

代碼配置
修改請(qǐng)認(rèn)準(zhǔn)官方文檔—baomidou(MybatisPlus):
https://mp.baomidou.com/config/generator-config.html#%E6%95%B0%E6%8D%AE%E6%BA%90-datasourceconfig-%E9%85%8D%E7%BD%AE
將下面代碼直接粘貼,修改配置即可使用:
package com.changlu.demo;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
/**
* @author ChangLu
* @date 2021/09/22 16:38
* @Desc 封裝之后的代碼生成器,僅需填寫幾個(gè)核心配置即可
*
* 核心依賴
* <dependency>
* <groupId>com.baomidou</groupId>
* <artifactId>mybatis-plus-generator</artifactId>
* <version>3.4.1</version>
* </dependency>
* <dependency>
* <groupId>mysql</groupId>
* <artifactId>mysql-connector-java</artifactId>
* <scope>runtime</scope>
* </dependency>
* <dependency>
* <groupId>org.apache.velocity</groupId>
* <artifactId>velocity-engine-core</artifactId>
* <version>2.0</version>
* </dependency>
* 其他依賴如:lombok、swagger3
**/
public class MyCodeGenerator {
//核心配置
private static String targetDatabaseName = "dj.svublog.rdb";//目標(biāo)數(shù)據(jù)庫(kù)名
private static String username = "root";//用戶名
private static String password = "123456";//密碼
private static String[] tihuan_table_prefix = {"sys_"}; //表替換前綴,可多個(gè)
private static String[] paichu_table_name = {"sys_member_role","sys_role_permission"}; //排除指定表,可多個(gè)
private static String referenceModule = "com.changlu.demo"; //當(dāng)前的引用模塊,如com.changlu.demo
private static String targetModule = "test"; //輸出指定文件目錄的包名 如:test
public static void main(String[] args) {
// 代碼生成器
AutoGenerator mpg = new AutoGenerator();
//全局配置(若是多模塊的話傳入對(duì)應(yīng)模塊的工程名!)
mpg.setGlobalConfig(createGlobalConfig(null));
// mpg.setGlobalConfig(createGlobalConfig(common));
//數(shù)據(jù)庫(kù)源
mpg.setDataSource(createDataSourceConfig());
//包配置
mpg.setPackageInfo(createPackageConfig());
//策略配置
mpg.setStrategy(createStrategyConfig());
//默認(rèn)Velocity模板生成
// mpg.setTemplateEngine(new FreemarkerTemplateEngine()); //其他模板Freemarker
//執(zhí)行操作
mpg.execute();
}
// 1、全局配置 若是多模塊,傳入指定父模塊名稱
private static GlobalConfig createGlobalConfig(String parentModuleName){
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");//獲取到當(dāng)前工程路徑地址,若是多模塊情況就會(huì)有問(wèn)題
if(parentModuleName != null){
projectPath = projectPath + "/"+parentModuleName+ "/src/main/java";
}else{
projectPath = projectPath + "/src/main/java";
}
gc.setOutputDir(projectPath)
.setAuthor("ChangLu") //設(shè)置作者
.setOpen(false) //不打開輸出目錄
.setSwagger2(true) //添加swagger2注解
.setBaseResultMap(true) //每個(gè)mapper文件中都生成通用結(jié)果映射集
.setFileOverride(true) //下次生成文件時(shí)進(jìn)行覆蓋(不設(shè)置的話當(dāng)進(jìn)行第二次生成就會(huì)在同一個(gè)目錄產(chǎn)生相同的文件)
.setEntityName("%sModel") //生成實(shí)體類文件名,如:%sModel 生成 UserModel
.setMapperName("%sMapper") //生成dao,這里我們配置生成如 UserMapper
.setMapperName("%sMapper") //生成mapper.xml文件,這里生成如 UserMapper.xml
.setServiceName("%sService") //生成service接口
.setServiceImplName("%sServiceImpl");//生成service實(shí)現(xiàn)類
return gc;
}
// 2、數(shù)據(jù)庫(kù)源
private static DataSourceConfig createDataSourceConfig(){
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://127.0.0.1:3306/+"+targetDatabaseName+"+?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai")
.setDriverName("com.mysql.cj.jdbc.Driver")
.setUsername(username)
.setPassword(password);
//轉(zhuǎn)換類型 LocalDateTime=>Date
dsc.setTypeConvert((globalConfig, fieldType) -> {
String t = fieldType.toLowerCase();
if(t.contains("datetime")){ //若是匹配到數(shù)據(jù)庫(kù)類型為"datetime",就返回Date類型(轉(zhuǎn)為Java的)
return DbColumnType.DATE;
}
//其它字段采用默認(rèn)轉(zhuǎn)換(非mysql數(shù)據(jù)庫(kù)可以使用其它默認(rèn)的數(shù)據(jù)庫(kù)轉(zhuǎn)換器)
return new MySqlTypeConvert().processTypeConvert(globalConfig,fieldType);
});
return dsc;
}
//3、包配置
private static PackageConfig createPackageConfig(){
PackageConfig pc = new PackageConfig();
pc.setModuleName(targetModule) //生成的模塊名,也就是生成目標(biāo)指定文件名的路徑下
.setParent(referenceModule); //父包名。如果為空,將下面子包名必須寫全部, 否則就只需寫子包名
return pc;
}
//4、策略配置
private static StrategyConfig createStrategyConfig(){
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel) //表名生成策略:下劃線轉(zhuǎn)駝峰,如pms_pro=>PmsPro
.setColumnNaming(NamingStrategy.underline_to_camel) //字段名生成策略,同上,如last_name=>lastName
.setEntityLombokModel(true) //支持lombok注解
.setTablePrefix(tihuan_table_prefix) //設(shè)置表的替換前綴:這里就是起到過(guò)濾作用
.setEntityTableFieldAnnotationEnable(true) //生成表、字段映射注解
.setExclude(paichu_table_name); //排除指定表
return strategy;
}
}

對(duì)應(yīng)的.xml文件可以放置在resource/mapper目錄下,會(huì)自動(dòng)掃到
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot 實(shí)戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法
本篇文章主要介紹了SpringBoot 實(shí)戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
IDEA使用jformdesigner插件做管理系統(tǒng)MVC架構(gòu)的步驟和實(shí)現(xiàn)思路
在?IntelliJ?IDEA?中結(jié)合?JFormDesigner?插件,通過(guò)?Swing?框架實(shí)現(xiàn)一個(gè)管理系統(tǒng)的?MVC?架構(gòu)是一種經(jīng)典的開發(fā)方式,以下是具體的步驟和實(shí)現(xiàn)思路,包含從項(xiàng)目創(chuàng)建到?MVC?架構(gòu)的核心代碼實(shí)現(xiàn),需要的朋友可以參考下2024-12-12
PL/SQL實(shí)現(xiàn)JAVA中的split()方法的例子
這篇文章主要介紹了PL/SQL實(shí)現(xiàn)JAVA中的split()方法的例子的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作
這篇文章主要介紹了MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Java如何導(dǎo)出包含多個(gè)Sheet的Excel文件
這篇文章主要為大家詳細(xì)介紹了Java如何導(dǎo)出包含多個(gè)Sheet的Excel文件,文中一共介紹了兩種實(shí)現(xiàn)方法,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-07-07
Java多線程執(zhí)行處理業(yè)務(wù)時(shí)間太久解決方法代碼示例
這篇文章主要介紹了Java多線程執(zhí)行處理業(yè)務(wù)時(shí)間太久解決方法代碼示例的相關(guān)資料,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
解決springboot依賴包中報(bào)錯(cuò)unknown的問(wèn)題
這篇文章主要介紹了解決springboot依賴包中報(bào)錯(cuò)unknown的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
淺談Java中Collection和Collections的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談Java中Collection和Collections的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08

