MyBatisPlus代碼生成器實踐(自己二次封裝)
前提準備
<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>核心配置
前提說明
你只需要配置一下內(nèi)容之后即可按照指定內(nèi)容來進行生成代碼:

代碼配置
修改請認準官方文檔—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 封裝之后的代碼生成器,僅需填寫幾個核心配置即可
*
* 核心依賴
* <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";//目標數(shù)據(jù)庫名
private static String username = "root";//用戶名
private static String password = "123456";//密碼
private static String[] tihuan_table_prefix = {"sys_"}; //表替換前綴,可多個
private static String[] paichu_table_name = {"sys_member_role","sys_role_permission"}; //排除指定表,可多個
private static String referenceModule = "com.changlu.demo"; //當前的引用模塊,如com.changlu.demo
private static String targetModule = "test"; //輸出指定文件目錄的包名 如:test
public static void main(String[] args) {
// 代碼生成器
AutoGenerator mpg = new AutoGenerator();
//全局配置(若是多模塊的話傳入對應(yīng)模塊的工程名!)
mpg.setGlobalConfig(createGlobalConfig(null));
// mpg.setGlobalConfig(createGlobalConfig(common));
//數(shù)據(jù)庫源
mpg.setDataSource(createDataSourceConfig());
//包配置
mpg.setPackageInfo(createPackageConfig());
//策略配置
mpg.setStrategy(createStrategyConfig());
//默認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");//獲取到當前工程路徑地址,若是多模塊情況就會有問題
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) //每個mapper文件中都生成通用結(jié)果映射集
.setFileOverride(true) //下次生成文件時進行覆蓋(不設(shè)置的話當進行第二次生成就會在同一個目錄產(chǎn)生相同的文件)
.setEntityName("%sModel") //生成實體類文件名,如:%sModel 生成 UserModel
.setMapperName("%sMapper") //生成dao,這里我們配置生成如 UserMapper
.setMapperName("%sMapper") //生成mapper.xml文件,這里生成如 UserMapper.xml
.setServiceName("%sService") //生成service接口
.setServiceImplName("%sServiceImpl");//生成service實現(xiàn)類
return gc;
}
// 2、數(shù)據(jù)庫源
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ù)庫類型為"datetime",就返回Date類型(轉(zhuǎn)為Java的)
return DbColumnType.DATE;
}
//其它字段采用默認轉(zhuǎn)換(非mysql數(shù)據(jù)庫可以使用其它默認的數(shù)據(jù)庫轉(zhuǎn)換器)
return new MySqlTypeConvert().processTypeConvert(globalConfig,fieldType);
});
return dsc;
}
//3、包配置
private static PackageConfig createPackageConfig(){
PackageConfig pc = new PackageConfig();
pc.setModuleName(targetModule) //生成的模塊名,也就是生成目標指定文件名的路徑下
.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è)置表的替換前綴:這里就是起到過濾作用
.setEntityTableFieldAnnotationEnable(true) //生成表、字段映射注解
.setExclude(paichu_table_name); //排除指定表
return strategy;
}
}

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

