mybatis-plus代码生成器(旧)
代码生成器(旧) | MyBatis-Plus (baomidou.com)
代码生成器配置旧 | MyBatis-Plus (baomidou.com)
适用版本:mybatis-plus-generator 3.5.1 以下版本,3.5.1 及以上的请参考 代码生成器新
代码生成器主要是指AutoGenerator,通过配置GlobalConfig、DataSource、PackageInfo、Strategy和TemplateEngine来执行。
GlobalConfig(全局配置)
主要是设置作者名称、各个层的文件名名称以及是否设置通用查询结果列和通用查询映射结果等
样例代码
public class GlobalConfigUtil {
public static GlobalConfig getGlobalConfig() {
// 全局配置
GlobalConfig gc = new GlobalConfig();
// 获取当前项目的绝对路径
String projectPath = System.getProperty("user.dir");
// 生成文件的输出目录
gc.setOutputDir(projectPath)
// 设置作者
.setAuthor(scanner("作者名称"))
// 是否打开输出目录
.setOpen(false)
// 设置通用查询结果列 <sql id="Base_Column_List"></sql>
.setBaseColumnList(true)
// 设置通用查询映射结果 <resultMap> 一般不设置,常规的mybatis会自动映射,带有对象的集合映射自己写
.setBaseResultMap(true)
// service名称
.setServiceName("I%sService")
// serviceImpl名称
.setServiceImplName("%sServiceImpl")
// entity名称
.setEntityName("%sEntity")
// 是否覆盖原有文件
.setFileOverride(true)
// 实体属性 Swagger2 注解,false的话则是生成注解
.setSwagger2(false);
return gc;
}
}
DataSource(数据源配置)
这里顾名思义主要是配置数据库信息,使其能连上相应的数据库
样例代码
public class DataSourceConfigUtil {
public static DataSourceConfig getDataSourceConfig() {
DataSourceConfig dsc = new DataSourceConfig();
// 设置数据库类型
dsc.setDbType(DbType.MYSQL)
.setUrl(
"jdbc:mysql://localhost:3306/"
+ scanner("请输入mysql数据库名称")
+ "?useUnicode=true&useSSL=false&characterEncoding=utf8")
.setDriverName("com.mysql.cj.jdbc.Driver")
.setUsername(scanner("请输入mysql用户名"))
.setPassword(scanner("请输入mysql密码"));
return dsc;
}
}
注意点
这里主要有一个类型转换的字段typeConvert
- 类型转换
- 默认由
dbType
类型决定选择对应数据库内置实现
实现 ITypeConvert
接口自定义数据库 字段类型
转换为自己需要的 java
类型,内置转换类型无法满足可实现 IColumnType
接口自定义
如针对Oracle种的date字段需要转换,因为默认会转换为java.time.LocalDateTime,根据需求要改为java.util.Date
.setTypeConvert(new OracleTypeConvert() {
@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig,
String fieldType) {
if ("date".equalsIgnoreCase(fieldType)) {
return DbColumnType.DATE;
}
return super.processTypeConvert(globalConfig, fieldType);
}
});
PackageInfo(包配置)
主要是配置路径信息和包名称
样例代码
public class PackageConfigUtil {
public static PackageConfig getPackageConfig() {
// 包配置
// 路径配置信息
String basePath = "GeneratorSuccess/src/main";
Map<String, String> pathInfo = new HashMap<>(6);
// mapper脚本路径
pathInfo.put(ConstVal.XML_PATH, basePath + "/java/com/gen/mapper");
// mapper接口路径
pathInfo.put(ConstVal.MAPPER_PATH, basePath + "/java/com/gen/mapper");
// service接口路径
pathInfo.put(ConstVal.SERVICE_PATH, basePath + "/java/com/gen/service");
// serviceImpl接口路径
pathInfo.put(ConstVal.SERVICE_IMPL_PATH, basePath + "/java/com/gen/service/impl");
// entity路径
pathInfo.put(ConstVal.ENTITY_PATH, basePath + "/java/com/gen/entity");
// controller路径
pathInfo.put(ConstVal.CONTROLLER_PATH, basePath + "/java/com/gen/controller");
PackageConfig pc = new PackageConfig();
pc.setParent("com.gen");
// 设置包名
pc.setXml("mapper")
.setMapper("mapper")
.setService("service")
.setServiceImpl("service.impl")
.setEntity("entity")
.setController("controller")
.setPathInfo(pathInfo);
return pc;
}
}
Strategy(策略配置)
主要是配置数据库映射到实体的命名策略、表前缀、逻辑删除字段、是否为lombok模型等
样例代码
public class StrategyConfigUtil {
public static StrategyConfig getStrategyConfig() {
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// 设置逻辑删除字段名称
strategy.setLogicDeleteFieldName("is_deleted");
// 数据库表映射到实体的命名策略
strategy.setNaming(NamingStrategy.underline_to_camel);
// 数据库表字段映射到实体的命名策略, 未指定按照 naming 执行
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 是否为 lombok 模型
// 3.3.2 以下版本默认生成了链式模型,3.3.2 以后,默认不生成,如有需要,请开启 chainModel
strategy.setEntityLombokModel(true);
// 生成 @RestController 控制器
strategy.setRestControllerStyle(true);
strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
// 驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
// 定义表前缀
strategy.setTablePrefix("t_");
return strategy;
}
}
注意点
如果不是继承默认的mp自带的BaseMapper、IService和ServiceImpl,需要在这个地方进行自定义,要精确到包名。
// 自定义继承的controller类全称,带包名
strategy.setSuperControllerClass();
// 自定义继承的Service类全称,带包名
strategy.setSuperServiceClass();
//自定义继承的ServiceImpl类全称,带包名
strategy.setSuperServiceImplClass();
//自定义继承的ServiceImpl类全称,带包名
strategy.setSuperEntityClass();
// 自定义继承的mapper类全称,带包名
strategy.setSuperMapperClass();
TemplateEngine(模板引擎)
这个部分可以直接用mp自带的,ftl为freemarker的模板,vm为velocity的模板,若要自定义模板可参考其他资料这部分还在学习中。
配置完成
配置完成后在main方法里执行即可
public static void main(String[] args) {
// 代码生成器
AutoGenerator autoGenerator = new AutoGenerator();
autoGenerator
// 获取全局配置
.setGlobalConfig(GlobalConfigUtil.getGlobalConfig())
// 获取数据源配置
.setDataSource(DataSourceConfigUtil.getDataSourceConfig())
// 获取包配置
.setPackageInfo(PackageConfigUtil.getPackageConfig())
// 获取策略配置
.setStrategy(StrategyConfigUtil.getStrategyConfig())
// 获取模板引擎
.setTemplateEngine(new VelocityTemplateEngine())
// 执行
.execute();
}
结果演示
输入
结果