這個是代碼自動生成器
MysqlGenerator.class
package com.kacen.simpleshop;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.*;
public class MysqlGenerator {
private static final String PACKAGE_NAME = "com.kacen.simpleshop";
private static final String OUT_PATH = "E:\\projectfortest\\simpleshop\\src\\main\\java";
private static final String AUTHOR = "kacen";
private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String URL = "jdbc:mysql://127.0.0.1:3306/自己的數(shù)據(jù)庫名字?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
private static final String USER_NAME = "root";
private static final String PASSWORD = "123456";
/**
* <p>
* MySQL 生成演示
* </p>
*/
public static void main(String[] args) {
// 自定義需要填充的字段
List<TableFill> tableFillList = new ArrayList<TableFill>();
// 代碼生成器
AutoGenerator mpg = new AutoGenerator().setGlobalConfig(
// 全局配置
new GlobalConfig().setOutputDir(OUT_PATH)// 輸出目錄
.setFileOverride(true)// 是否覆蓋文件
.setActiveRecord(true)// 開啟 activeRecord 模式
.setEnableCache(false)// XML 二級緩存
.setBaseResultMap(false)// XML ResultMap
.setBaseColumnList(true)// XML columList
.setAuthor(AUTHOR)
// 自定義文件命名,注意 %s 會自動填充表實(shí)體屬性馋没!
.setXmlName("%sMapper").setMapperName("%sMapper")
// .setServiceName("MP%sService")
// .setServiceImplName("%sServiceDiy")
// .setControllerName("%sAction")
).setTemplateEngine(new FreemarkerTemplateEngine()).setDataSource(
// 數(shù)據(jù)源配置
new DataSourceConfig().setDbType(DbType.MYSQL)// 數(shù)據(jù)庫類型
.setTypeConvert(new MySqlTypeConvert() {
// 自定義數(shù)據(jù)庫表字段類型轉(zhuǎn)換【可選】
//@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
System.out.println("轉(zhuǎn)換類型:" + fieldType);
// if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
// return DbColumnType.BOOLEAN;
// }
return super.processTypeConvert(globalConfig, fieldType);
}
}).setDriverName(DRIVER).setUsername(USER_NAME).setPassword(PASSWORD).setUrl(URL))
.setStrategy(
// 策略配置
new StrategyConfig()
// .setCapitalMode(true)// 全局大寫命名
// .setTablePrefix(new String[]{"unionpay_"})// 此處可以修改為您的表前綴
.setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
// .setInclude(new String[] {"citycode_org"}) // 需要生成的表
// .setExclude(new String[]{"test"}) // 排除生成的表
// 自定義實(shí)體,公共字段
// .setSuperEntityColumns(new String[]{"test_id"})
.setTableFillList(tableFillList)
// 自定義實(shí)體父類
// .setSuperEntityClass("com.baomidou.demo.common.base.BsBaseEntity")
// // 自定義 mapper 父類
// .setSuperMapperClass("com.baomidou.demo.common.base.BsBaseMapper")
// // 自定義 service 父類
// .setSuperServiceClass("com.baomidou.demo.common.base.BsBaseService")
// // 自定義 service 實(shí)現(xiàn)類父類
// .setSuperServiceImplClass("com.baomidou.demo.common.base.BsBaseServiceImpl")
// 自定義 controller 父類
// .setSuperControllerClass("com.baomidou.demo.TestController")
// 【實(shí)體】是否生成字段常量(默認(rèn) false)
// public static final String ID = "test_id";
.setEntityColumnConstant(true)
// 【實(shí)體】是否為構(gòu)建者模型(默認(rèn) false)
// public User setName(String name) {this.name = name; return this;}
.setEntityBuilderModel(true)
// 【實(shí)體】是否為lombok模型(默認(rèn) false)<a >document</a>
.setEntityLombokModel(true)
// Boolean類型字段是否移除is前綴處理
// .setEntityBooleanColumnRemoveIsPrefix(true)
// .setRestControllerStyle(true)
// .setControllerMappingHyphenStyle(true)
).setPackageInfo(
// 包配置 new PackageConfig().setModuleName(MODULE_NAME).setParent(PACKAGE_NAME)
new PackageConfig().setParent(PACKAGE_NAME)// 自定義包路徑
.setController("controller")// 這里是控制器包名勾怒,默認(rèn) web
.setXml("mapper").setMapper("mapper")
).setCfg(
// 注入自定義配置笔链,可以在 VM 中使用 cfg.abc 設(shè)置的值
new InjectionConfig() {
@Override
public void initMap() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
this.setMap(map);
}
}.setFileOutConfigList(
Collections.<FileOutConfig>singletonList(new FileOutConfig("/templates/mapper.xml.ftl") {
// 自定義輸出文件目錄
@Override
public String outputFile(TableInfo tableInfo) {
return OUT_PATH + "/xml/" + tableInfo.getEntityName() + "Mapper.xml";
}
})))
.setTemplate(
// 關(guān)閉默認(rèn) xml 生成,調(diào)整生成 至 根目錄
new TemplateConfig().setXml(null)
// 自定義模板配置卡乾,模板可以參考源碼 /mybatis-plus/src/main/resources/template 使用 copy
// 至您項(xiàng)目 src/main/resources/template 目錄下,模板名稱也可自定義如下配置:
// .setController("...");
// .setEntity("...");
// .setMapper("...");
// .setXml("...");
// .setService("...");
// .setServiceImpl("...");
);
// 執(zhí)行生成
mpg.execute();
}
}
為什么特地分開來寫呢幔妨,因?yàn)檎冞@里有的人使用
1.freemarker引擎
2.用velocity引擎
這兩者之間用法稍有不同鹦赎,如果遇到報(bào)錯請自行檢查一下古话。
不同處在于
1.使用freeMarker的小伙伴,記得再set的使用加上這一行锁施,不然默認(rèn)是使用velocity引擎的
setTemplateEngine(new FreemarkerTemplateEngine())
2./templates/mapper.xml.ftl和/templates/mapper.xml.vm
1.freemarker
setFileOutConfigList(
Collections.<FileOutConfig>singletonList(new FileOutConfig("/templates/mapper.xml.ftl") {
// 自定義輸出文件目錄
@Override
public String outputFile(TableInfo tableInfo) {
return OUT_PATH + "/xml/" + tableInfo.getEntityName() + "Mapper.xml";
}
})))
2.velocity
setFileOutConfigList(
Collections.<FileOutConfig>singletonList(new FileOutConfig("/templates/mapper.xml.vm") {
// 自定義輸出文件目錄
@Override
public String outputFile(TableInfo tableInfo) {
return OUT_PATH + "/xml/" + tableInfo.getEntityName() + "Mapper.xml";
}
})))