一、背景
最近我们有个新项目,同伴都推荐用mybatis-plus,说实话之前没用过啊!用过mybatis、jdbcTemplate、tk-mybatis、以及公司自研的,平常做demo都是用jpa。都说mybatis-plus很方便,代码可以自动生成,就搞一个代码生成的类
二、依赖和代码
1.添加依赖,前提你的项目可以连mysql了
compile 'com.baomidou:mybatis-plus-generator:3.4.0' implementation 'org.freemarker:freemarker:2.3.28'
2.生成代码的代码
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
public class CodeGenerator {
// 作者
private static final String AUTHOR = "cxp";
// 数据库连接
private static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&characterEncoding=UTF-8&useUnicode=true&autoReconnect=true&serverTimezone=Asia/Shanghai";
// 数据库用户名
private static final String DB_USERNAME = "root";
// 数据库密码
private static final String DB_PASSWORD = "123456";
// 要生成表名,逗号分隔
private static final String TABLE_NAMES = "demo";
public static void main(String[] args) {
// 代码生成器
AutoGenerator autoGenerator = new AutoGenerator();
// 全局配置
GlobalConfig globalConfig = new GlobalConfig();
// 相对路径配置
String projectPath = System.getProperty("user.dir");
globalConfig.setOutputDir(projectPath + "/src/main/java");
globalConfig.setAuthor(AUTHOR);
globalConfig.setOpen(false);
// 实体属性 Swagger2 注解
globalConfig.setSwagger2(true);
// 自定义生成的ServiceName,去掉默认的ServiceName前面的I
globalConfig.setServiceName("%s" + ConstVal.SERVICE);
globalConfig.setMapperName("%sDao");
globalConfig.setEntityName("%s" + ConstVal.ENTITY);
autoGenerator.setGlobalConfig(globalConfig);
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl(DB_URL);
dataSourceConfig.setSchemaName("public");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfig.setUsername(DB_USERNAME);
dataSourceConfig.setPassword(DB_PASSWORD);
autoGenerator.setDataSource(dataSourceConfig);
// 包配置
PackageConfig packageConfig = new PackageConfig();
// packageConfig.setModuleName("");
// 父包
packageConfig.setParent("com.cxp.bifrost");
// dao路径
packageConfig.setMapper("dao.mysql");
// entity路径
packageConfig.setEntity("pojo.po");
autoGenerator.setPackageInfo(packageConfig);
// 自定义配置
InjectionConfig injectionConfig = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 velocity
// String templatePath = "/templates/mapper.xml.vm";
// 自定义输出配置
List fileOutConfigList = new ArrayList<>();
// 自定义配置会被优先输出
fileOutConfigList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名,如果你 Entity 设置了前后缀,此处注意 xml 的名称会跟着发生变化!!!
return projectPath + "/src/main/resources/mapper/" + packageConfig.getModuleName()
+ "/" + tableInfo.getMapperName() + StringPool.DOT_XML;
}
});
injectionConfig.setFileOutConfigList(fileOutConfigList);
autoGenerator.setCfg(injectionConfig);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
// 指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
// templateConfig.setEntity("");
// templateConfig.setService("");
// templateConfig.setController("");
// templateConfig.setMapper("");
templateConfig.setXml(null);
autoGenerator.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
// 公共父类
// strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
// 写于父类中的公共字段
// strategy.setSuperEntityColumns("id");
strategy.setInclude(TABLE_NAMES.split(","));
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix(packageConfig.getModuleName() + "_");
autoGenerator.setStrategy(strategy);
// 使用Freemarker模板引擎
autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());
autoGenerator.execute();
}
}
总结,代码看着很长,其实很简单,需要改动就几处,这里做个笔记,下次就不用导出搜了



