网站首页 > 技术文章 正文
官方文档
- 快速入门
- 代码生成器配置(新)
示例项目技术栈
- spring boot 2.7.4
- mybatis 3.5.9
- mybatis plus 3.5.2
- mybatis plus generator 3.5.3
- mysql 8
- velocity 2.3
- hutool 5.8.8
- lombok 1.2.11
示例程序选择的技术都是目前为止的最新版本。
示例项目创建步骤
1、创建测试数据表
建表脚本:
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`menu_id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`pid` bigint COMMENT '上级菜单ID',
`sub_count` int NULL DEFAULT 0 COMMENT '子菜单数目',
`type` int COMMENT '菜单类型',
`title` varchar(255) COMMENT '菜单标题',
`name` varchar(255) COMMENT '组件名称',
`component` varchar(255) COMMENT '组件',
`menu_sort` int COMMENT '排序',
`icon` varchar(255) COMMENT '图标',
`path` varchar(255) COMMENT '链接地址',
`i_frame` bit(1) COMMENT '是否外链',
`cache` bit(1) NULL DEFAULT b'0' COMMENT '缓存',
`hidden` bit(1) NULL DEFAULT b'0' COMMENT '隐藏',
`permission` varchar(255) COMMENT '权限',
`create_by` varchar(255) COMMENT '创建者',
`update_by` varchar(255) COMMENT '更新者',
`create_time` datetime(0) COMMENT '创建日期',
`update_time` datetime(0) COMMENT '更新时间',
PRIMARY KEY (`menu_id`) USING BTREE,
UNIQUE INDEX `uniq_title`(`title`) USING BTREE,
UNIQUE INDEX `uniq_name`(`name`) USING BTREE,
INDEX `inx_pid`(`pid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 116 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统菜单' ROW_FORMAT = COMPACT;
2、创建一个 Spring Boot 项目
创建一个 Spring Boot 项目,在pom.xml文件中引入如下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.8</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
MyBatis Plus Generator支持的模板引擎有Velocity、Beetl、FreeMarker,笔者这里选择的是MyBatis Plus Generator默认的模板引擎 —— Velocity。
2、创建代码生成器启动类
数据源配置
FastAutoGenerator
// 配置数据源
.create("jdbc:mysql://127.0.0.1:3306/eladmin?characterEncoding=UTF-8&useUnicode=true&useSSL=false", "root", "123456")
// 全局配置
.globalConfig( ... )
// 包配置
.packageConfig( ... )
// 策略配置
.strategyConfig( ... )
// 执行
.execute();
全局配置
FastAutoGenerator
// 配置数据源
.create("jdbc:mysql://127.0.0.1:3306/eladmin?characterEncoding=UTF-8&useUnicode=true&useSSL=false", "root", "123456")
// 全局配置
.globalConfig(builder -> {
builder.author("wanggc") // 设置作者
.commentDate("yyyy-MM-dd hh:mm:ss") // 注释日期
.outputDir(System.getProperty("user.dir") + "/src/main/java") // 指定输出目录
.disableOpenDir() //禁止打开输出目录,默认打开
;
})
// 包配置
.packageConfig( ... )
// 策略配置
.strategyConfig( ... )
// 执行
.execute();
笔者在全局配置中配置了作者名称、代码注释中日期格式、生成文件存储目录,生成代码完成后会默认打开输出目录,笔者感觉没必要,这里就禁止打开输出目录了。
包配置
FastAutoGenerator
// 配置数据源
.create("jdbc:mysql://127.0.0.1:3306/eladmin?characterEncoding=UTF-8&useUnicode=true&useSSL=false", "root", "123456")
// 全局配置
.globalConfig( ... )
// 包配置
// 包配置
.packageConfig(builder -> {
builder.parent("demo.generator") // 设置父包名
.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mappers")); // 设置mapperXml生成路径
})
// 策略配置
.strategyConfig( ... )
// 执行
.execute();
在包配置中,笔者配置了父包名,配置了mybatis mapper文件存储路径。在包配置中是可以配置 Entity 包名、Mapper 包名、Service 包名、Controller 包名的,笔者这里没有这个需求,就没有配置。
策略配置
FastAutoGenerator
// 配置数据源
.create("jdbc:mysql://127.0.0.1:3306/eladmin?characterEncoding=UTF-8&useUnicode=true&useSSL=false", "root", "123456")
// 全局配置
.globalConfig( ... )
// 包配置
.packageConfig( ... )
// 策略配置
.strategyConfig(builder -> {
builder.addInclude("sys_menu") // 设置需要生成的表名
.addTablePrefix("sys_") // 设置过滤表前缀
// Entity 策略配置
.entityBuilder()
.enableLombok() //开启 Lombok
.enableFileOverride() // 覆盖已生成文件
.naming(NamingStrategy.underline_to_camel) //数据库表映射到实体的命名策略:下划线转驼峰命
.columnNaming(NamingStrategy.underline_to_camel) //数据库表字段映射到实体的命名策略:下划线转驼峰命
// Mapper 策略配置
.mapperBuilder()
.enableFileOverride() // 覆盖已生成文件
// Service 策略配置
.serviceBuilder()
.enableFileOverride() // 覆盖已生成文件
.formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService
.formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl
// Controller 策略配置
.controllerBuilder()
.enableFileOverride() // 覆盖已生成文件
;
})
// 执行
.execute();
在策略配置中,笔者配置了需要生成的表名、过滤表前缀、开启 Lombok、覆盖已生成文件、下划线转驼峰命、Service 接口文件及实现类的文件名。
代码生成器启动类完整代码
完整的代码生成器启动类 —— CodeGenerator.java —— 内容如下:
package demo.generator;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.Collections;
public class CodeGenerator {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/eladmin?characterEncoding=UTF-8&useUnicode=true&useSSL=false", "root", "abc123")
// 全局配置
.globalConfig(builder -> {
builder.author("wanggc") // 设置作者
.commentDate("yyyy-MM-dd hh:mm:ss") //注释日期
.outputDir(System.getProperty("user.dir") + "/src/main/java") // 指定输出目录
.disableOpenDir() //禁止打开输出目录,默认打开
;
})
// 包配置
.packageConfig(builder -> {
builder.parent("demo.generator") // 设置父包名
.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mappers")); // 设置mapperXml生成路径
})
// 策略配置
.strategyConfig(builder -> {
builder.addInclude("sys_menu") // 设置需要生成的表名
.addTablePrefix("sys_") // 设置过滤表前缀
// Entity 策略配置
.entityBuilder()
.enableLombok() //开启 Lombok
.enableFileOverride() // 覆盖已生成文件
.naming(NamingStrategy.underline_to_camel) //数据库表映射到实体的命名策略:下划线转驼峰命
.columnNaming(NamingStrategy.underline_to_camel) //数据库表字段映射到实体的命名策略:下划线转驼峰命
// Mapper 策略配置
.mapperBuilder()
.enableFileOverride() // 覆盖已生成文件
// Service 策略配置
.serviceBuilder()
.enableFileOverride() // 覆盖已生成文件
.formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService
.formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl
// Controller 策略配置
.controllerBuilder()
.enableFileOverride() // 覆盖已生成文件
;
})
.execute();
}
}
注意:全局配置中的用于覆盖已生成文件的方法fileOverride在当前版本中已过时,官方文档中目前还未更新。笔者查源码了解到当前版本配置覆盖已生成文件的方法是在策略配置中使用enableFileOverride方法。 配置方式可以看上面的代码。与之前版本不同的是,现在配置Entity、Mapper、Service、Controller覆盖已生成文件需要单独配置,而不是像之前一样只配置一处,所有已生成的文件都会被覆盖。
效果图
后记
MyBatis Plus Generator 根据默认模板生成的代码是比较简单的,在实际的应用中需要根据自身需要编写代码模板。
猜你喜欢
- 2024-10-26 MybatisPlus —注解汇总(mybatis中注解)
- 2024-10-26 MyBatis使用需谨慎,看看这里有没有你曾踩到过的坑
- 2024-10-26 解决mybatis动态生成sql错误的问题
- 2024-10-26 基于 MyBatis 的动态 SQL 技术详解
- 2024-10-26 mybatis插入获取主键的方式和原理
- 2024-10-26 Mybatis执行多条语句/批量更新方式
- 2024-10-26 MyBatis-Plus扫盲啦(mybatis plus vo)
- 2024-10-26 一文带你搞定mybatis的映射配置文件
- 2024-10-26 什么是mybatis-plus,你没用过吧,我刚学的,...
- 2024-10-26 mybatis 逆向工程使用姿势不对,把表清空了,心里慌的一比
- 11-26Win7\8\10下一条cmd命令可查得笔记本电脑连接过的Wifi密码
- 11-26一文搞懂MySQL行锁、表锁、间隙锁详解
- 11-26电脑的wifi密码忘记了?一招教你如何找回密码,简单明了,快收藏
- 11-26代码解决忘记密码问题 教你用CMD命令查看所有连接过的WIFI密码
- 11-26CMD命令提示符能干嘛?这些功能你都知道吗?
- 11-26性能测试之慢sql分析
- 11-26论渗透信息收集的重要性
- 11-26如何查看电脑连接过的所有WiFi密码
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)