Mybatis-Plus自动生成代码
💡 官网:https://baomidou.com/pages/779a6e/
1.导入依赖
<!-- MybatisPlus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!-- MP自动生成代码 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
<!--velocity模板-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!-- swagger ui-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<!--在引用时请在maven中央仓库搜索最新版本号-->
<version>3.0.3</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
2.application.yml
配置 数据库相关数据
3.Generator(MP自动生成代码)
package com.example;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* MP自动生成代码
*/
public class Generator {
// 表名的前缀,从表生成代码时会去掉前缀
private static final String TABLE_PREFIX = "";
public static void main(String[] args) {
//——————————————————————————————————模板 start—————————————————————————————————
// //1、配置数据源
// FastAutoGenerator.create("url", "username", "password")
// //2、全局配置
// .globalConfig(...)
// //3、包配置
// .packageConfig(...)
// //4、策略配置
// .strategyConfig(...)
// //5、模板引擎配置
// .templateEngine(...)
// //6、执行
// .execute();
//——————————————————————————————————模板 end—————————————————————————————————
Scanner scanner = new Scanner(System.in);
System.out.println("————————————————————————————————————数据库配置——————————————————————————————————————");
System.out.println("输入库名:");
String databasename = scanner.next();
System.out.println("输入用户名:");
String JDBC_USER_NAME = scanner.next();
System.out.println("输入密码:");
String JDBC_PASSWORD = scanner.next();
System.out.println("————————————————————————————————————包配置——————————————————————————————————————");
System.out.println("输入包名:");
String PACKAGE_NAME = scanner.next();
System.out.println("输入模块名:");
String MODULE_NAME = scanner.next();
System.out.println("————————————————————————————————————表配置——————————————————————————————————————");
System.out.println("创建几个表:");
Integer i = scanner.nextInt();
System.out.println("输入表名(回车分开):");
List<String> TBL_NAMES_List = new ArrayList<>();
for(int x = 0 ; x < i ; x++){
TBL_NAMES_List.add(scanner.next());
}
String[] TBL_NAMES = TBL_NAMES_List.toArray(new String[TBL_NAMES_List.size()]);
System.out.println("————————————————————————————————————作者配置——————————————————————————————————————");
System.out.println("输入作者名:");
String Author = scanner.next();
String JDBC_URL = "jdbc:mysql://localhost:3306/"+databasename+"?useSSL=true&useUnicode=UTF-8&serverTimezone=Asia/Shanghai";
//获取当前工程路径(这里无需修改)
String projectPath = System.getProperty("user.dir");
/**
* 1.数据库配置(设置数据源)
配置数据库连接以及需要使用的字段
*/
DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(JDBC_URL, JDBC_USER_NAME, JDBC_PASSWORD)
.dbQuery(new MySqlQuery())
.typeConvert(new MySqlTypeConvert())
.keyWordsHandler(new MySqlKeyWordsHandler());
//创建对象
FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder);
/**
* 2.全局配置
*/
fastAutoGenerator.globalConfig(
globalConfigBuilder -> globalConfigBuilder
.fileOverride() // 覆盖已生成文件
.disableOpenDir() // 不打开生成文件目录
.outputDir(projectPath + "/src/main/java") // 指定输出目录,注意斜杠的表示
.author(Author) // 设置注释的作者
.commentDate("yyyy-MM-dd HH:mm:ss") // 设置注释的日期格式
.dateType(DateType.TIME_PACK) // 使用java8新的时间类型
.enableSwagger() // 开启swagger文档
)
/**
日期类型 DateType
DateType.ONLY_DATE 使用 java.util.date包下的 Date
DateType.SQL_PACK 使用 java.sql包下的 Date
DateType.TIME_PACK 因为会使用 java.time.LocalDateTime jdk1.8以上才支持 (推荐使用)
*/
/**
* 3.包配置
*/
.packageConfig(
packageConfigBuilder -> packageConfigBuilder
.parent(PACKAGE_NAME) // 设置父包名
.moduleName(MODULE_NAME) // 设置父包模块名
.entity("entity") // 设置MVC下各个模块的包名
.mapper("mapper")
.service("service")
.serviceImpl("service.impl")
.controller("controller")
.xml("mapper.xml") // 设置XML资源文件的目录
)
/**
* 4.模板配置
*/
/*
.templateConfig(
templateConfigBuilder -> templateConfigBuilder
.disable(TemplateType.ENTITY) // 禁用模板
.entity("/templates/entity.java") // 设置实体模板路径(JAVA)
.service("/templates/service.java") // 设置service模板路径
.serviceImpl("/templates/serviceImpl.java") // 设置serviceImpl模板路径
.mapper("/templates/mapper.java") // 设置mapper模板路径
.xml("/templates/mapper.xml") // 设置mapperXml模板路径
.controller("/templates/controller.java") // 设置controller模板路径
);
*/
/**
* 5.注入配置 TODO
*/
/**
* 6.策略配置
*/
.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder
.enableCapitalMode() // 开启大写命名
.enableSkipView() // 开启跳过视图
.disableSqlFilter() // 禁用sql过滤
.addInclude(TBL_NAMES) // 设置需要生成的表名
.addTablePrefix(TABLE_PREFIX) // 设置过滤表前缀
)
/**
* 6.1 Entity策略配置
*/
.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.entityBuilder()
.enableTableFieldAnnotation() // 生成实体时生成字段的注解,包括@TableId注解等---
.naming(NamingStrategy.underline_to_camel) // 数据库表和字段映射到实体的命名策略,为下划线转驼峰
.columnNaming(NamingStrategy.underline_to_camel)
.idType(IdType.AUTO) // 全局主键类型为AUTO(自增)
.enableLombok() // 支持lombok开启注解
.logicDeleteColumnName("deleted") // 逻辑删除字段名(数据库)
.logicDeletePropertyName("deleted") // 逻辑删除属性名(实体)
.addTableFills(new Column("create_time", FieldFill.INSERT)) // 自动填充配置 create_time update_time 两种方式
.addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
.versionColumnName("version") // 开启乐观锁
.disableSerialVersionUID() // 禁用生成 serialVersionUID,默认值:true
.enableChainModel() // 开启实体类链式编程
.formatFileName("%sEntity") // 实体名称格式化为XXXEntity formatFileName("%sEntity")
)
/**
* 6.2 Controller策略配置
*/
.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder()
.enableRestStyle() // 开启生成@RestController控制器
.enableHyphenStyle() // 开启驼峰转连字符 localhost:8080/user_list
)
/**
* 6.3 Service策略配置
格式化service接口和实现类的文件名称,去掉默认的ServiceName前面的I ----
*/
.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.serviceBuilder()
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl"))
/**
* 6.4 Mapper策略配置
格式化 mapper文件名,格式化xml实现类文件名称
*/
.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.mapperBuilder()
.enableMapperAnnotation() // 开启 @Mapper 注解
.formatMapperFileName("%sMapper")
.formatXmlFileName("%sMapper"))
/** 7.生成代码
*
*/
// 默认的是Velocity引擎模板
.execute();
}
}
具体参数记得看官网!