文章目录
- 简介
- 使用步骤
- 1. 导入MyBatis-Plus相关依赖
- 2. 项目的端口和连接数据库配置:
- 3. 添加配置类
- 4. 编写代码生成器的类
- 5. 更改自己的配置
- 6. 运行自动生成相关的代码
简介
MyBatis-Plus 的代码生成器是AutoGenerator ,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率
使用步骤
1. 导入MyBatis-Plus相关依赖
<!-- mybatisplus的依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!--MyBatis-Plus模板引擎-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<!--swagger依赖-->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>spring-boot-starter-swagger</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。
如果您选择了非默认引擎,需要在 AutoGenerator 中 设置模板引擎。
2. 项目的端口和连接数据库配置:
# 端口配置
server.port=8081
# 导入mysql的连接驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus1?useUnicode=true&characterEncoding=UTF-8&useSSL=FALSE&serverTimezone=UTC
#useSSL是否使用安全连接
3. 添加配置类
//扫描mapper文件夹
@MapperScan("com.syp.mybatis.mapper")
@EnableTransactionManagement//事务的注解,自动管理事务,默认开启
@Configuration//声明这是一个配置类
public class MyBatisPlusConfig {
//注册乐观锁的插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
//分页插件的配置:官网配置
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
//逻辑删除组件
@Bean
public ISqlInjector iSqlInjector(){
return new LogicSqlInjector();
}
//性能组件的配置
@Bean
@Profile({"dev","test"}) //设置dev和test,在相应的环境中开启,保证效率
public PerformanceInterceptor performanceInterceptor(){
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(1000);//默认为毫秒设置SQL执行的最大时间,如果超过了该时间,就不执行了
performanceInterceptor.setFormat(true);//是否开启格式化支持
return performanceInterceptor;
}
4. 编写代码生成器的类
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
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.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
/**
* @description:代码自动生成器
* @return
*/
public class MyAutoCode {
public static void main(String[] args) {
//需要构建一个代码自动生成器的对象
AutoGenerator autoGenerator = new AutoGenerator();
//执行之前的配置策略
//1. 全局配置
GlobalConfig gcfig = new GlobalConfig();
//1.1获取系统的一些属性
//1.1.1 输出路径的配置
String projectPath = System.getProperty("user.dir");//获取当前用户的目录,项目路径
gcfig.setOutputDir(projectPath+"/src/main/java");//输出到该目录下的:/src/main/java
//1.1.2 自动策略的配置
gcfig.setAuthor("SYP");//所有的生成代码上面都会有作者
gcfig.setOpen(false); //是否打开windows的资源管理器
gcfig.setFileOverride(false);//是否覆盖之前已经生成的代码
gcfig.setServiceName("%sService");//服务的名字,通过正则表达式去掉之前的I
gcfig.setIdType(IdType.ID_WORKER);//id主键的的策略是默认的
gcfig.setDateType(DateType.ONLY_DATE);//日期的类型,仅仅只是时间
gcfig.setSwagger2(true);//是否自动配置Swagger文档
//1.1.3 将全局配置丢到自动生成器中
autoGenerator.setGlobalConfig(gcfig);
//2 数据库,数据源的配置
//2.1 数据源的配置
DataSourceConfig dsConfig = new DataSourceConfig();
dsConfig.setUrl("jdbc:mysql://localhost:3306/mybatis_plus1?useUnicode=true&characterEncoding=UTF-8&useSSL=FALSE&serverTimezone=UTC");
dsConfig.setDriverName("com.mysql.cj.jdbc.Driver");//数据库的连接驱动
dsConfig.setUsername("root");
dsConfig.setPassword("123456");
dsConfig.setDbType(DbType.MYSQL);//数据库的类型
//2.2 将数据源丢入到自动生成器中
autoGenerator.setDataSource(dsConfig);
//3. 包的配置
//3.1 包的配置,规定生成哪一些包,以及生成的包需要放在什么地方
PackageConfig pkConfig = new PackageConfig();
pkConfig.setModuleName("code");//模块名
pkConfig.setParent("com.syp");//类的存放路径
pkConfig.setEntity("entity");//实体类的包名
pkConfig.setMapper("mapper");
pkConfig.setService("service");
pkConfig.setController("controller");
//3.2 将配置丢入到自动生成器中
autoGenerator.setPackageInfo(pkConfig);
//4. 策略配置
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// strategy.setInclude("user");//设置需要映射的一些表名,包含的表名: 生成一张表
strategy.setInclude("user","student","teacher");//设置需要映射的一些表名,包含的表名: 生成多张表
strategy.setNaming(NamingStrategy.underline_to_camel);//设定包的命名规则:下划线转驼峰命名
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库字段策略,列的命名规则
// strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
strategy.setEntityLombokModel(true); //是否使用lombok开启注解
strategy.setLogicDeleteFieldName("deleted");//逻辑删除的名字,
//有逻辑删除字段,设计自动填充配置
TableFill createTime = new TableFill("create_time", FieldFill.INSERT);//自动填充修改时间,国际规范中字段名为:gmt_create
TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);//自动填充更新时间,国际规范中字段名为:gmt_modified
//将自动填充设置到自动生成的策略里面
ArrayList<TableFill> tableFillList = new ArrayList<>();//创建一个list来添加策略
tableFillList.add(createTime);//将创建时候的策略加入到list中
tableFillList.add(updateTime);//将更新时候的策略加入到list中
//将配置丢入到策略中
strategy.setTableFillList(tableFillList);
//5.乐观锁的策略配置
strategy.setVersionFieldName("version");//乐观锁的配置
strategy.setRestControllerStyle(true);//设置驼峰命名格式
strategy.setControllerMappingHyphenStyle(true);//转换为下划线命名:localhost:8081/hellotest_id_1
//将策略丢入到自动生成器对象 中
autoGenerator.setStrategy(strategy);
//6. 执行构造器
autoGenerator.execute();//执行代码构造器,在执行之前需要配置一些策略
}
}
5. 更改自己的配置
只需要在更改自己的数据库配置,之后更改需要生成的相关的表名:
strategy.setInclude("user","student","teacher");
6. 运行自动生成相关的代码
结果:
数据库表结构:
user表:
teacher表:
运行结果:
代码结构:
到此代码已经自动生成完毕,之后既可以根据自己的需要进行修改,添加相应的功能