<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-generatorartifactId>
<version>3.5.1version>
dependency>
<dependency>
<groupId>org.freemarkergroupId>
<artifactId>freemarkerartifactId>
<version>2.3.30version>
dependency>
/**
* 3.5.x 新版生成器 可连远程数据库 ,旧版远程报错
* new MyBatisGenerate.Builder()
* .setDbName("universal_portal")
* .setModule("")
* .setPrefix(new String[]{""})
* .setParentPackage("generate")
* .setDbHostAndPort("localhost:3306")
* .setDbUserName("root")
* .setDbPsw("123456")
* .setTables(new String[]{"user"})
* .build()
* .generate();
*
* @author bufei
* @email 。。。
* @date 2022/3/22 15:22
*/
@Data
public class MyBatisGenerate {
/**
* 数据库名称
*/
private String dbName;
/**
* 模块名称
*/
private String module;
/**
* 去除表前缀如t_ tb_
*/
private String[] prefix;
/**
* 父级包名称如appenv
*/
private String parentPackage;
/**
* 数据库host和端口
*/
private String dbHostAndPort;
/**
* 数据库用户名
*/
private String dbUserName;
/**
* 数据库密码
*/
private String dbPsw;
/**
* 表名称 ,string数组
*/
private String[] tables;
private MyBatisGenerate(String dbName, String module, String[] prefix, String parentPackage, String dbHostAndPort, String dbUserName, String dbPsw, String[] tables) {
this.dbName = dbName;
this.module = module;
this.prefix = prefix;
this.parentPackage = parentPackage;
this.dbHostAndPort = dbHostAndPort;
this.dbUserName = dbUserName;
this.dbPsw = dbPsw;
this.tables = tables;
}
/**
* 代码生成
*/
public void generate() {
// 数据源配置
String url = "jdbc:mysql://" + dbHostAndPort + "/" + dbName + "?characterEncoding=utf8&useSSL=true&serverTimezone=Hongkong&strictUpdates=false&autoReconnect=true";
DataSourceConfig dsb = new DataSourceConfig.Builder(url, dbUserName, dbPsw)
.dbQuery(new MySqlQuery())
// 库名
.schema(dbName)
.typeConvert(new MySqlTypeConvert())
.keyWordsHandler(new MySqlKeyWordsHandler()).build();
// 获取当前项目路径
String projectPath = System.getProperty("user.dir");
// 全局配置
GlobalConfig gc = new GlobalConfig.Builder()
// 输出目录
.outputDir(projectPath + "/src/main/java")
// 覆盖已生成文件
.fileOverride()
// 作者
.author("bufei")
// 启用swagger
.enableSwagger()
.dateType(DateType.TIME_PACK)
.commentDate("yyyy-MM-dd HH:mm:ss")
.build();
// 包配置
PackageConfig pc = new PackageConfig.Builder()
.parent("edu.xupt.framework." + parentPackage)
// 设置父包模块名
.moduleName(module)
// 设置实体包
.entity("infrastructure.domain.model")
// 服务类
.service("infrastructure.repository")
// 服务类实现
.serviceImpl("infrastructure.repository.impl")
.mapper("infrastructure.mapper")
.xml("mapper.xml")
.controller("controller")
.other("other")
// 路径信息
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath + "/src/main/resources/mybatis/mapper/"))
.build();
// 模板配置 不配无法生成
TemplateConfig tc = new TemplateConfig.Builder()
.disable(TemplateType.ENTITY)
.entity("/templates/entity.java")
.service("/templates/service.java")
.serviceImpl("/templates/serviceImpl.java")
.mapper("/templates/mapper.java")
.mapperXml("/templates/mapper.xml")
.controller("/templates/controller.java")
.build();
// 注入配置
InjectionConfig ic = new InjectionConfig.Builder()
.beforeOutputFile((tableInfo, objectMap) -> {
System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
})
// 没有自定义配置map对象
// 没有模板文件
.build();
// 策略配置
StrategyConfig sc = new StrategyConfig.Builder()
// 策略 开启大写命名
.enableCapitalMode()
.enableSkipView()
// 禁用SQL过滤
.disableSqlFilter()
// 表名
.addInclude(tables)
// 要移除的表前缀
.addTablePrefix(prefix)
// 配置实体策略
.entityBuilder()
// 父类
.superClass(Model.class)
// 禁用序列化
.disableSerialVersionUID()
// 启用链式编程
.enableChainModel()
//启用Lombok
.enableLombok()
// 启用表字段注解
.enableTableFieldAnnotation()
// 乐观锁
.versionColumnName("version")
.versionPropertyName("version")
// 逻辑删除
.logicDeleteColumnName("del_flag")
.logicDeletePropertyName("delFlag")
// 表名驼峰
.naming(NamingStrategy.underline_to_camel)
// 列名驼峰命名
.columnNaming(NamingStrategy.underline_to_camel)
.idType(IdType.AUTO)
// 格式化文件名称
.formatFileName("%sModel")
// 配置controller 策略
.controllerBuilder()
// 设置父类,没有,不配
// .superClass(BaseController.class)
// RestController
.enableRestStyle()
.formatFileName("%sController")
// 配置serveice 策略
.serviceBuilder()
// BaseRepository impl
.superServiceClass(BaseRepository.class)
.superServiceImplClass(BaseRepositoryImpl.class)
.formatServiceFileName("%sRepository")
.formatServiceImplFileName("%sRepositoryImpl")
// 配置mapper策略
.mapperBuilder()
// 父类
.superClass(SuperMapper.class)
// 启用mapper注解
.enableMapperAnnotation()
// 启用 BaseResultMap
.enableBaseResultMap()
.enableBaseColumnList()
.formatMapperFileName("%sMapper")
.formatXmlFileName("%sMapper")
.build();
// 执行生成
new AutoGenerator(dsb)
// 全局配置
.global(gc)
.packageInfo(pc)
.injection(ic)
.strategy(sc)
.template(tc)
// 默认VelocityTemplateEngine引擎,改为freemark引擎
.execute(new FreemarkerTemplateEngine());
}
public static class Builder {
public Builder() {
}
private String dbName;
private String module;
private String[] prefix;
private String parentPackage;
private String dbHostAndPort;
private String dbUserName;
private String dbPsw;
private String[] tables;
/**
* 设置数据库名称
*
* @param dbName 数据库名称
* @return
*/
public Builder setDbName(String dbName) {
this.dbName = dbName;
return this;
}
/**
* 设置模块名称
*
* @param module 模块名称如 app-env
* @return
*/
public Builder setModule(String module) {
this.module = module;
return this;
}
/**
* 设置要去除的表前缀
*
* @param prefix 要去除的表前缀 如t_;tbl_
* @return
*/
public Builder setPrefix(String[] prefix) {
this.prefix = prefix;
return this;
}
/**
* 设置父级包名称
*
* @param parentPackage 父级包名称 如 appenv
* @return
*/
public Builder setParentPackage(String parentPackage) {
this.parentPackage = parentPackage;
return this;
}
/**
* 设置数据库host:port
*
* @param dbHostAndPort 数据库host:port
* @return
*/
public Builder setDbHostAndPort(String dbHostAndPort) {
this.dbHostAndPort = dbHostAndPort;
return this;
}
/**
* 设置数据库用户名
*
* @param dbUserName 数据库用户名
* @return
*/
public Builder setDbUserName(String dbUserName) {
this.dbUserName = dbUserName;
return this;
}
/**
* 设置数据库密码
*
* @param dbPsw 数据库密码
* @return
*/
public Builder setDbPsw(String dbPsw) {
this.dbPsw = dbPsw;
return this;
}
/**
* 设置表名称
*
* @param tables 数据库表名称数组
* @return
*/
public Builder setTables(String[] tables) {
this.tables = tables;
return this;
}
public MyBatisGenerate build() {
return new MyBatisGenerate(dbName, module, prefix, parentPackage, dbHostAndPort, dbUserName, dbPsw, tables);
}
}
}
public static void main(String[] args) {
new MyBatisGenerate.Builder()
.setDbName("test")
.setModule("")//没有分模块
.setPrefix(new String[]{""})//没有需要移除的前缀
.setParentPackage("generate")//当前项目的包名
.setDbHostAndPort("localhost:3306")
.setDbUserName("root")
.setDbPsw("123456")
.setTables(new String[]{"notice"})
.build()
.generate();
// SpringApplication.run(LearnMybatisPlusGenerateApplication.class, args);
}
生成的model 会没有泛型的标记
例如
@Getter
@Setter
@Accessors(chain = true)
@TableName("user")
@ApiModel(value = "UserModel对象", description = "用户表")
public class UserModel extends Model {
// 这里还需要手动改为 Model
}
没有理解 InjectionConfig ic = new InjectionConfig.Builder();
注入配置的用法。