大家好,我是小白学Java。
最近在工作中遇到一个功能,涉及到的表有点多,不想写实体类和xml了,想用以下MyBatis-Plus的逆向工程生成代码,于是在网上找了一下相关的文章也看了一下源码,然后把自己学习和使用做一下记录,实测生效,生成代码绝对够用。
声明:由于这篇文章是我后写的,学习过程我查看了网上相关的帖子,但是当时没记录文章地址,这里就不贴了,在这儿我也要感谢网上的大佬们!
一、准备工作:引入依赖
引入mybatis-plus、mybatis-plus-generator、velocity-engine相关的依赖
<!--mybatis-plus启动器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!--逆向工程依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generate</artifactId>
<version>2.3.3</version>
</dependency>
<!--mp逆向工程需要使用的模板-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
二、编写工具类
编写工具类的大概步骤七步:
- 创建代码生成器
- 配置数据库连接
- 设置全局配置信息
- 设置包名相关信息
- 设置不需要生成的逻辑层
- 设置策略
- 执行代码生成器
下面是代码生成器代码,其中包括一些细节记录,对于大部属功能来说应该都够用了,其中还有可优化的地方,比如获取控制台录入信息和模板配置等在这里没有体现
package com.wjs_007.study.generator;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class CodeGenerator {
public static void main(String[] args) {
//1、创建代码生成器
AutoGenerator autoGenerator = new AutoGenerator();
//2、配置数据库连接信息
DataSourceConfig dataSource = new DataSourceConfig();
dataSource.setDriverName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/study_db?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8");
dataSource.setUsername("username");
dataSource.setPassword("password");
//给代码生成器设置数据库连接
autoGenerator.setDataSource(dataSource);
//3、设置全局配置信息
GlobalConfig globalConfig = new GlobalConfig();
System.out.println(System.getProperty("user.dir"));
//设置代码生成后输出的位置
globalConfig.setOutputDir(System.getProperty("user.dir") + "\\myModuleName\\src\\main\\java");
//设置生成完毕后是否打开生成代码所在的目录
globalConfig.setOpen(false);
//设置作者
globalConfig.setAuthor("wjs_007");
//设置是否覆盖原始生成的文件
globalConfig.setFileOverride(false);
//设置生成数据层接口名称,%s为占位符,指代模块名称
globalConfig.setMapperName("%sMapper");
globalConfig.setXmlName("%sMapper");
//在xml中生成整表对应的resultMap
globalConfig.setBaseResultMap(true);
//在xml中生成整表的字段列表
globalConfig.setBaseColumnList(true);
//设置生成服务层接口名称
globalConfig.setServiceName("I%sService");
//设置生成服务层实现类的名称
globalConfig.setServiceImplName("%sServiceImpl");
globalConfig.setControllerName("%sController");
//设置Id生成策略,此处我使用的是自增,也可以使用其他的,在IdType中有可选项
globalConfig.setIdType(IdType.AUTO);
//给代码生成器设置全局配置信息
autoGenerator.setGlobalConfig(globalConfig);
//4、设置包名相关的配置信息
PackageConfig packageConfig = new PackageConfig();
//输出目标基包路径,就是src/main/java下面的域名反写,如果不设置默认是com.baomidou
packageConfig.setParent("com.wjs_007.study");
//功能模块的包名,比如模板管理的代码写在com.wjs_007.study.template下,此处需要写template
packageConfig.setModuleName("gtest");
packageConfig.setController("controller");
packageConfig.setEntity("entity");
packageConfig.setService("service");
packageConfig.setServiceImpl("service.impl");//service接口的实现类放置位置,我放在service下的impl下
packageConfig.setMapper("mapper");
packageConfig.setXml("mapper");//此处我把mapper接口和xml文件都放在mapper包下了
//给代码生成器设置包的相关配置
autoGenerator.setPackageInfo(packageConfig);
//5、设置不生成的业务层,此处设置不生成controller。此处可以省略,如果有需要就写
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setController(null);
//给代码生成器设置模板
autoGenerator.setTemplate(templateConfig);
//6、设置策略
StrategyConfig strategyConfig = new StrategyConfig();
//数据库表名映射到实体的命名策略:下划线转驼峰
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
//数据库表字段映射到实体类的命名策略:下划线转驼峰
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
//实体类使用lombok注解
strategyConfig.setEntityLombokModel(true);
//实体类字段是否添加注解
strategyConfig.entityTableFieldAnnotationEnable(false);
//添加Rest风格注解
strategyConfig.setRestControllerStyle(true);
//在Controller上的RequestMapping请求路径设置,true表示使用中划线连接,false表示使用驼峰
strategyConfig.setControllerMappingHyphenStyle(false);
//目标表
strategyConfig.setInclude("sys_role","sys_user");
//给代码生成器设置策略
autoGenerator.setStrategy(strategyConfig);
//7、执行逆向工程操作
autoGenerator.execute();
}
}