一、简介
AutoGenerator
是 MyBatis-Plus
的代码生成器,通过 AutoGenerator
可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。(更多资料可以参考官方文档:代码生成器 | AutoGenerator)
下面我将介绍如何在项目中应用代码生成工具
二、引入相关依赖
1、添加 代码生成器 依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
注意:MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖。MyBatis-Plus 支持 Velocity
、Freemarker
、Beetl
模板引擎:
- Velocity(默认):
<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.3</version> </dependency>
- Freemarker:
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.31</version> </dependency>
- Beetl:
<dependency> <groupId>com.ibeetl</groupId> <artifactId>beetl</artifactId> <version>3.3.2.RELEASE</version> </dependency>
如果选择了非默认引擎,需要在 AutoGenerator
中 设置模板引擎:
// 创建自动生成器对象
AutoGenerator generator = new AutoGenerator();
// 设置 freemarker 模板引擎
generator.setTemplateEngine(new FreemarkerTemplateEngine());
// 设置 beetl 模板引擎
generator.setTemplateEngine(new BeetlTemplateEngine());
// 设置自定义模板引擎
generator.setTemplateEngine(new CustomTemplateEngine());
2、引入数据库相关依赖
由于生成代码时需要连接数据库,所以我们需要引入数据库依赖和数据库驱动依赖,这里我以 mysql
数据库和 druid
数据库连接池为例:
<!-- mysql 连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<!-- mysql 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
3、引入其它依赖
为了配置 lombok
模型,我们可以引入 lombok
依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
三、实例代码如下:
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;
/**
* @author 王廷云
* @since 2021/06/25
*/
public class CodeGenerator {
@Test
public void run() {
// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
// 获取工程模块路径
String projectPath = System.getProperty("user.dir");
// 设置代码生成路径
gc.setOutputDir(projectPath + "/src/main/java");
// 设置作者姓名
gc.setAuthor("wangtingyun");
// 生成后是否打开资源管理器
gc.setOpen(false);
// 重新生成时文件是否覆盖
gc.setFileOverride(true);
// 去掉Service接口的首字母I
gc.setServiceName("%sService");
// 主键策略
gc.setIdType(IdType.ASSIGN_ID);
// 定义生成的实体类中日期类型
gc.setDateType(DateType.ONLY_DATE);
// 开启Swagger2模式
gc.setSwagger2(true);
mpg.setGlobalConfig(gc);
// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
// 数据库类型
dsc.setDbType(DbType.MYSQL);
// 数据库url地址
dsc.setUrl("jdbc:mysql://192.168.56.10:3306/mydb");
// 数据库驱动名
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
// 数据库用户名
dsc.setUsername("root");
// 数据库密码
dsc.setPassword("root");
mpg.setDataSource(dsc);
// 4、包配置
PackageConfig pc = new PackageConfig();
// 生成的包名
pc.setParent("com.example");
// 生成的模块名
pc.setModuleName("demo");
// 生成的包名:com.example.demo.controller
pc.setController("controller");
// 生成的包名:com.example.demo.entity
pc.setEntity("entity");
// 生成的包名:com.example.demo.service
pc.setService("service");
// 生成的包名:com.example.demo.mapper
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
// 数据库表名
strategy.setInclude("tb_user");
// 数据库表映射到实体的命名策略
strategy.setNaming(NamingStrategy.underline_to_camel);
// 数据库表字段映射到实体的命名策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 生成实体时去掉表前缀
strategy.setTablePrefix("tb_");
// 是否为lombok模型
strategy.setEntityLombokModel(true);
// restful api风格控制器
strategy.setRestControllerStyle(true);
// url中驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
// 否生成实体时,生成字段注解
strategy.setEntityTableFieldAnnotationEnable(true);
// 配置逻辑删除字段
strategy.setLogicDeleteFieldName("is_deleted");
mpg.setStrategy(strategy);
// 6、执行
mpg.execute();
}
}