Mybatis-Plus 代碼生成器工具類 對 MP 的代碼生成器寫一個簡單的工具類: public class Main { public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); S ...
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")
保持一致即可。