根据以上代码,可以生成一篇博客文章介绍如何使用 MyBatis-Plus 的代码生成器来自动生成基于 Spring Boot 的项目代码。文章可以按照以下结构进行组织:
使用 MyBatis-Plus 代码生成器快速生成 Spring Boot 项目代码
介绍
在开发过程中,我们经常需要编写大量的 CRUD(创建、读取、更新、删除)代码,特别是针对数据库表的操作。为了提高开发效率,减少重复工作,可以借助 MyBatis-Plus 提供的代码生成器来自动生成部分代码。
本文将介绍如何使用 MyBatis-Plus 的代码生成器,快速生成基于 Spring Boot 的项目代码。
步骤
-
配置数据源信息
在代码中配置数据库连接信息,包括数据库 URL、用户名和密码。
-
设置需要生成代码的表名
指定需要生成代码的数据库表名,可以是单个表或者多个表。
-
配置全局信息
设置生成文件的输出目录、作者名称、日期格式等全局配置信息。
-
配置包信息
指定生成代码的包名,包括实体类、服务接口、服务实现类、Mapper 接口、XML 映射文件和控制器类等。
-
配置模板信息
自定义生成代码的模板文件路径,包括实体类模板、服务接口模板、服务实现类模板、Mapper 接口模板、XML 映射文件模板和控制器类模板。
-
配置策略信息
设置生成代码的策略,包括命名策略、字段策略、乐观锁配置、逻辑删除配置、字段填充配置等。
-
执行代码生成器
调用代码生成器的 execute 方法,执行代码生成器,生成相应的代码文件。
示例代码
java
@SpringBootTest
class MybatisDemoApplicationTests {
@Test
void contextLoads() {
/* 数据库配置 */
DataSourceConfig dataSourceConfig =
new DataSourceConfig.Builder("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false", "root", "123456")
.dbQuery(new MySqlQuery())
.build();
String[] tableNames = {"t_User", "t_Student", "t_School", "t_Teacher"};
for (String tableName : tableNames) {/* 创建代码生成器对象 */
AutoGenerator generator = new AutoGenerator(dataSourceConfig);
String property = System.getProperty("user.dir");
/* 全局配置 */
com.baomidou.mybatisplus.generator.config.GlobalConfig globalConfig = new com.baomidou.mybatisplus.generator.config.GlobalConfig.Builder()
.fileOverride() // 如果文件存在,是否覆盖
.outputDir(property + "/src/main/java") // 生成文件的输出目录
.author("菜菜") // 作者名称
.enableSwagger() // 是否开启Swagger2
.dateType(DateType.TIME_PACK) // 时间类型,默认使用java.util.Date
.commentDate("yyyy-MM-dd") // 注释中的日期格式
.build();
generator.global(globalConfig);
/* 包配置(PackageConfig) */
PackageConfig packageConfig = new PackageConfig.Builder()
.parent("com.example.demo") // 父包名
.entity("entity") // 实体类包名
.service("service") // 服务接口包名
.serviceImpl("service.impl") // 服务实现类包名
.mapper("mapper") // Mapper接口包名
.xml("mapper.xml") // XML映射文件包名
.controller("controller") // 控制器类包名
.other("other") // 其他文件包名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D:\\code\\mybatis-demo\\src\\main\\resources\\mapper")) // 文件输出路径
.build();
generator.packageInfo(packageConfig);
/* 模板配置(TemplateConfig) */
TemplateConfig templateConfig = new TemplateConfig.Builder()
.disable(TemplateType.ENTITY) // 禁用实体类的默认模板
.entity("/templates/entity.java") // 自定义实体类模板文件路径
.service("/templates/service.java") // 自定义服务接口模板文件路径
.serviceImpl("/templates/serviceImpl.java") // 自定义服务实现类模板文件路径
.mapper("/templates/mapper.java") // 自定义Mapper接口模板文件路径
.mapperXml("/templates/mapper.xml") // 自定义XML映射文件模板文件路径
.controller("/templates/controller.java") // 自定义控制器类模板文件路径
.build();
generator.template(templateConfig);
String formatTableName = tableName.substring(2);
// 每次循环创建新的策略配置对象
StrategyConfig strategyConfig = new StrategyConfig.Builder()
.enableCapitalMode() // 开启大写命名
.enableSkipView() // 是否跳过视图
.disableSqlFilter() // 禁用 SQL 过滤器
.addInclude(tableName) // 需要包含的表名,使用正则表达式
.build();
// 实体配置
strategyConfig.entityBuilder()
.disableSerialVersionUID() // 禁用 serialVersionUID
.enableChainModel() // 开启链式模型
.enableLombok() // 开启Lombok
.enableRemoveIsPrefix() // 移除字段名中的is前缀
.enableTableFieldAnnotation() // 开启字段注解
.enableActiveRecord() // 开启ActiveRecord模式
.versionColumnName("version") // 乐观锁字段名
.versionPropertyName("version") // 乐观锁属性名
.logicDeleteColumnName("deleted") // 逻辑删除字段名
.logicDeletePropertyName("deleted") // 逻辑删除属性名
.naming(NamingStrategy.no_change) // 命名策略:不改变原始表名
.columnNaming(NamingStrategy.underline_to_camel) // 字段命名策略:下划线转驼峰
.addTableFills(new Column("create_time", FieldFill.INSERT)) // 添加表填充字段
.addTableFills(new Property("update_time", FieldFill.INSERT_UPDATE)) // 添加表填充属性
.idType(IdType.AUTO) // 主键类型:自增
.formatFileName(formatTableName) // 文件名格式化
.build();
// 控制器配置
strategyConfig.controllerBuilder()
.enableRestStyle() // 开启RestController风格
.formatFileName(formatTableName + "Controller") // 控制器文件名格式化
.build();
// 服务配置
strategyConfig.serviceBuilder()
.formatServiceFileName(formatTableName + "Service") // 服务接口文件名格式化
.formatServiceImplFileName(formatTableName + "ServiceImpl") // 服务实现类文件名格式化
.superServiceImplClass((Class<?>) null) // 设置父类为空,即不继承任何父类
.build();
// Mapper配置
strategyConfig.mapperBuilder()
.superClass(BaseMapper.class) // Mapper接口的父类
.enableMapperAnnotation() // 开启Mapper注解
.enableBaseResultMap() // 开启基本结果映射
.enableBaseColumnList() // 开启基本列映射
.formatMapperFileName(formatTableName + "Mapper") // Mapper接口文件名格式化
.formatXmlFileName(formatTableName + "Mapper"); // XML映射文件名格式化
// 应用策略配置到代码生成器
generator.strategy(strategyConfig);
/* 执行代码生成器 */
generator.execute();
}
}
}
结语
通过使用 MyBatis-Plus 的代码生成器,我们可以快速生成基于 Spring Boot 的项目代码,节省开发时间,提高工作效率。希望本文对您有所帮助!
在文章中,你可以根据自己的理解和经验进行扩展和修改,添加更多详细的说明、示例代码和注意事项。