引言
在Java后端开发中,数据库操作是必不可少的环节。传统的MyBatis开发需要手动编写实体类、Mapper接口、Service接口以及对应的XML文件,这个过程不仅繁琐,而且容易出现错误。MyBatis-Plus(简称MP)作为MyBatis的增强工具,提供了强大的代码生成器功能,可以帮助开发者一键生成所需的所有代码,极大地提高了开发效率。
本文将详细介绍如何使用MyBatis-Plus的代码生成器,深入解析每个配置项的作用和使用方法,并提供完整的实战案例。
一、Maven依赖配置
要使用MyBatis-Plus的代码生成器,我们首先需要在项目的pom.xml文件中添加相应的Maven依赖。以下是需要的核心依赖:
1. MyBatis-Plus核心依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency>2. MyBatis-Plus代码生成器依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.3.1</version> </dependency>3. 数据库驱动依赖(以MySQL为例)
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <scope>runtime</scope> </dependency>4. 模板引擎依赖(可选)
如果需自定义代码生成模板,可以添加模板引擎依赖,例如Freemarker:
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.32</version> </dependency>二、MPDBConfig.java代码解析
1. 包导入部分
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;这里导入了MyBatis-Plus代码生成器所需的核心类:
DbType:数据库类型枚举
AutoGenerator:代码生成器主类
DataSourceConfig:数据源配置类
GlobalConfig:全局配置类
PackageConfig:包名策略配置类
StrategyConfig:生成策略配置类
NamingStrategy:命名策略枚举
2. 主方法入口
public static void main(String[] args) { // 代码生成器 AutoGenerator autoGenerator = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); // ... 配置内容 autoGenerator.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); // ... 配置内容 autoGenerator.setDataSource(dsc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); // ... 配置内容 autoGenerator.setStrategy(strategy); // 包名策略配置 PackageConfig pc = new PackageConfig(); // ... 配置内容 autoGenerator.setPackageInfo(pc); // 执行逆向生成 autoGenerator.execute(); }这是代码的主入口,创建了AutoGenerator对象,并依次配置了全局配置、数据源配置、策略配置和包名策略配置,最后执行生成操作。
3. 全局配置详解
GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("xxx"); // 设置作者 gc.setFileOverride(true); // 多次生成是否覆盖之前的 // gc.setActiveRecord(true); // 设置是否开启AR模式 // gc.setIdType(IdType.ASSIGN_ID); // 设置主键策略 gc.setServiceName("%sService"); // 设置service名称,默认为IxxxService,去掉I gc.setBaseResultMap(true); // 生成的mapper.xml中包含基本的ResultMap结果集 gc.setBaseColumnList(true); // 生成基本的sql查询片段 gc.setOpen(false); // gc.setSwagger2(true); 实体属性 Swagger2 注解关键配置项解析:
setOutputDir:设置代码生成的输出目录,这里使用了System.getProperty("user.dir")获取当前项目根目录setAuthor:设置生成代码的作者信息setFileOverride:设置是否覆盖已存在的文件,true表示覆盖,false表示不覆盖setServiceName:设置Service接口的命名规则,%sService表示生成的Service接口名不带前缀"I",默认为"I%sService"setBaseResultMap:设置是否生成基本的ResultMap,用于查询结果映射setBaseColumnList:设置是否生成基本的SQL查询片段,方便进行字段选择setOpen:设置生成代码后是否自动打开输出目录
4. 数据源配置详解
DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.MYSQL); dsc.setUrl("jdbc:mysql://127.0.0.1:3306/imooc-hire?useUnicode=true&useSSL=false&characterEncoding=utf8"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("123456");关键配置项解析:
setDbType:设置数据库类型,这里选择的是MySQLsetUrl:设置数据库连接URL,包含了数据库地址、端口、数据库名以及连接参数setDriverName:设置数据库驱动类名,MySQL 8.0+使用com.mysql.cj.jdbc.DriversetUsername:设置数据库用户名setPassword:设置数据库密码
5. 策略配置详解
StrategyConfig strategy = new StrategyConfig(); strategy.setCapitalMode(true); // 开启全局大小写(true: 大写) strategy.setNaming(NamingStrategy.underline_to_camel); // 下划线转驼峰命名 strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 下划线转驼峰命名 strategy.setInclude("users", "admin");关键配置项解析:
setCapitalMode:设置是否开启全局大写命名setNaming:设置表名的命名策略,这里选择的是下划线转驼峰setColumnNaming:设置字段名的命名策略,同样选择下划线转驼峰setInclude:设置需要生成代码的表名,可以指定多个表名
6. 包名策略配置详解
PackageConfig pc = new PackageConfig(); pc.setParent("com.xxx"); pc.setEntity("pojo"); pc.setMapper("mapper"); pc.setXml("mapper.xml"); pc.setService("service"); pc.setServiceImpl("service.impl"); // pc.setController(null);关键配置项解析:
setParent:设置生成代码的父包名setEntity:设置实体类的包名setMapper:设置Mapper接口的包名setXml:设置Mapper XML文件的包名setService:设置Service接口的包名setServiceImpl:设置Service实现类的包名setController:设置Controller类的包名,如果设置为null则不生成Controller类
三、代码生成器的高级用法
1. 自定义模板
如果默认模板不符合需求,可以使用自定义模板。例如:
TemplateConfig templateConfig = new TemplateConfig() .setController("/templates/controller.java") .setEntity("/templates/entity.java") .setMapper("/templates/mapper.java") .setXml("/templates/mapper.xml") .setService("/templates/service.java") .setServiceImpl("/templates/serviceImpl.java"); autoGenerator.setTemplate(templateConfig);2. 自定义生成字段
可以通过配置字段筛选规则,只生成特定字段的代码:
StrategyConfig strategy = new StrategyConfig(); strategy.setExcludeColumns("create_time", "update_time"); // 排除不需要生成的字段3. 自定义生成规则
可以通过配置StrategyConfig的其他方法来定制生成规则,例如:
strategy.setRestControllerStyle(true); // 生成RestController风格的Controller strategy.setControllerMappingHyphenStyle(true); // Controller的URL使用连字符风格 strategy.setVersionFieldName("version"); // 设置乐观锁字段 strategy.setLogicDeleteFieldName("deleted"); // 设置逻辑删除字段四、使用注意事项
1. 数据库连接配置
确保数据库连接URL、用户名和密码正确,并且数据库服务器正在运行,网络连接正常。
2. 表名和字段名匹配
确保配置中的表名和字段名与数据库中的实际表名和字段名一致,否则可能导致生成失败或生成的代码不正确。
3. 代码覆盖问题
如果设置了setFileOverride(true),则生成的代码会覆盖已存在的文件,建议在生成前备份重要代码。
4. 生成目录权限
确保生成代码的目录有写入权限,否则可能导致生成失败。
五、完整代码展示
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; public class MPDBConfig { public static void main(String[] args) { // 代码生成器 AutoGenerator autoGenerator = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("xxx"); // 设置作者 gc.setFileOverride(true); // 多次生成是否覆盖之前的 // gc.setActiveRecord(true); // 设置是否开启AR模式 // gc.setIdType(IdType.ASSIGN_ID); // 设置主键策略 gc.setServiceName("%sService"); // 设置service名称,默认为IxxxService,去掉I gc.setBaseResultMap(true); // 生成的mapper.xml中包含基本的ResultMap结果集 gc.setBaseColumnList(true); // 生成基本的sql查询片段 gc.setOpen(false); // gc.setSwagger2(true); 实体属性 Swagger2 注解 autoGenerator.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.MYSQL); dsc.setUrl("jdbc:mysql://127.0.0.1:3306/imooc-hire?useUnicode=true&useSSL=false&characterEncoding=utf8"); // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("123456"); autoGenerator.setDataSource(dsc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setCapitalMode(true); // 开启全局大小写(true: 大写) strategy.setNaming(NamingStrategy.underline_to_camel); // 下划线转驼峰命名 strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 下划线转驼峰命名 // strategy.setInclude(scanner("表名,多个英文逗号分割").split(",")); strategy.setInclude("users"); strategy.setInclude("admin"); autoGenerator.setStrategy(strategy); // 包名策略配置 PackageConfig pc = new PackageConfig(); pc.setParent("com.xxx"); pc.setEntity("pojo"); pc.setMapper("mapper"); pc.setXml("mapper.xml"); pc.setService("service"); pc.setServiceImpl("service.impl"); // pc.setController(null); autoGenerator.setPackageInfo(pc); // 执行逆向生成 autoGenerator.execute(); } }六、总结
MyBatis-Plus的代码生成器是一个非常强大的工具,可以极大地提高开发效率。通过本文的介绍,你应该已经了解了如何使用代码生成器,以及如何根据自己的需求进行配置。
使用代码生成器可以帮助我们减少重复劳动,避免手动编写代码时可能出现的错误,同时保持代码风格的一致性。希望本文对你有所帮助,祝你在使用MyBatis-Plus代码生成器时取得成功!