Mybatis-Plus 代碼生成器工具類
對 MP 的代碼生成器寫一個簡單的工具類:
public class Main {
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入" + tip + ":");
if (scanner.hasNext()) {
String ipt = scanner.next();
if (!StringUtils.isEmpty(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("請輸入正確的" + tip + "!");
}
public static void main(String[] args) {
// String parentPath = System.getProperty("user.dir"); // 如果工程就一個模塊只設定 parentName
String parentPath = "E:\\xxx\\xxx\\"; // 如果工程就一個模塊只設定 parentName
String submoduleName = "test"; // 如果有子模塊還需設定 submoduleName 一般針對一個模塊的表
String generatingPath = "com.cnda.server"; // 逆向生成的代碼的根路徑
/*
* AutoGenerator 代碼生成器
*/
AutoGenerator ag = new AutoGenerator();
System.out.println(parentPath);
//1. 全域配置
GlobalConfig config = new GlobalConfig();
/*
* GlobalConfig主要配置的屬性有:
* -- 是否支持AR模式
* -- 生成代碼結構的根路徑
* -- 檔案是否覆寫
* -- 主鍵策略
* -- 生成基本的resultMap
* -- 生成基本的SQL片段,也就是xml檔案中的sql標簽,包含了表中的欄位名
*/
config // 設定作者名
.setAuthor("cnda")
// 是否支持AR模式:AR 模式相對于原始的 MP 模式來說,可以通過 pojo 物體類(繼承了 Model 類)
// 直接操作資料庫,但是底層任然是使用 mapper 進行操作,
// .setActiveRecord(true)
// 生成路徑:專案地址 + 模塊地址,一般情況下
.setOutputDir(parentPath + "/"+ submoduleName+"/src/main/java")
// 檔案覆寫
//.setFileOverride(false)
// 打開輸出目錄
.setOpen(false)
// 主鍵策略
.setIdType(IdType.AUTO)
// 設定日期格式
//.setDateType(DateType.ONLY_DATE)
// 設定生成的service介面的名字的首字母是否為I,默認Service是以I開頭的
.setServiceName("%sService")
//生成基本的resultMap
.setBaseResultMap(true)
// 物體屬性 swagger2 注解
//.setSwagger2(true)
//生成基本的SQL片段
.setBaseColumnList(true);
//2. 資料源配置
/**
* DataSourceConfig的主要屬性配置
* 此處為MP連接資料庫讀取資料庫中表的屬性和欄位名,幫我們自動生成專案結構和資料庫中表對應的物體類
* -- 資料庫型別
*/
DataSourceConfig dsConfig = new DataSourceConfig();
// 設定資料庫型別
dsConfig//.setDbType(DbType.MYSQL)
.setDriverName("com.mysql.cj.jdbc.Driver")
.setUrl("jdbc:mysql://localhost:3306/yeb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai")
.setUsername("root")
.setPassword("root");
// 自定義配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
}
};
// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 通過模板引擎是 velocity
// String templatePath = "/templates/mapper.xml.vm";
// 自定義輸出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定義配置會被優先輸出
// 定義了 mapper.xml 檔案輸出的位置!指向的是 resources/mapper/*
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定義輸出檔案名 , 如果你 Entity 設定了前后綴、此處注意 xml 的名稱會跟著發生變化!!
return parentPath + "/"+submoduleName+"/src/main/resources/mapper/"+tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
//3. 策略配置globalConfiguration中
/**
* StrategyConfig的主要屬性配置
* -- 全域大寫命名
* -- 資料庫表映射到物體類的命名策略
* -- 生成表(要生成物體類的表名,支持多表·11一起生成,以陣列的形式填寫)
* -- 設定表的前綴(TablePrefix)
*/
StrategyConfig stConfig = new StrategyConfig();
//全域大寫命名
stConfig.setCapitalMode(true)
// 資料庫表映射到物體的命名策略
.setNaming(NamingStrategy.underline_to_camel) // 駝峰命名
// 資料庫表欄位映射物體類的命名策略
.setColumnNaming(NamingStrategy.no_change) // 不做任何改變
// lombok 模型
.setEntityLombokModel(true)
// 生成 @RestController 控制器
.setRestControllerStyle(true)
// 生成的表,多個表以英文逗號區分
.setInclude(scanner("表名,多個英文逗號分割").split(",")) // 由 scanner 控制臺輸入多個表名進行逆向工程生成代碼
//url中駝峰轉連字符
.setControllerMappingHyphenStyle(true)
// 設定表的前綴,防止生成物體類時出現表的前綴
.setTablePrefix("t_");
//4. 包名策略配置
/**
* PackageConfig的主要屬性配置
* 公共包--Parent
*/
PackageConfig pkConfig = new PackageConfig();
pkConfig.setParent(generatingPath)
.setMapper("mapper")
.setService("service")
.setController("controller")
.setServiceImpl("service.impl")
.setEntity("pojo");
// mapper.xml 之前在 InjectionConfig 那里配置過了
//.setXml("mapper");
//5. 整合配置
/**
* 整合需要的物件有:
* --> GlobalConfig
* --> DataSourceConfig
* --> StrategyConfig
* --> PackageConfig
*/
ag.setGlobalConfig(config)
.setDataSource(dsConfig)
.setStrategy(stConfig)
.setCfg(cfg)
.setTemplate(templateConfig)
.setTemplateEngine(new FreemarkerTemplateEngine())
.setPackageInfo(pkConfig);
//6. 執行
ag.execute();
System.out.println("======= 代碼生成完畢 ========");
}
}
上面應該能滿足大部分基礎的專案結構,需要注意的是前面幾個路徑的變數設定,
還有一個就是 mapper.xml 一般是在專案的 resource 目錄下,如果需要設定到與 mapper 介面一個包下,就需要將 ag.setCfg(cfg) 洗掉,然后再 pkConfig.setXml("path") 保證與 setMapper("path") 保持一致即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/546034.html
標籤:Java
