-
Spring Boot 3 开发上线一个前后端分离的生产级系统(五) - MyBatis-Plus & 代码生成
Mybatis 增强工具 MyBatis-Plus 集成
[MyBatis-Plus] (https://baomidou.com)是一个 MyBatis (https://www.mybatis.org/mybatis-3)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。我们可以按照如下步骤集成到我们的项目中:
- 添加 mybatis-plus 的启动器依赖
|
<dependency> |
|
<groupId>com.baomidou</groupId> |
|
<artifactId>mybatis-plus-boot-starter</artifactId> |
|
<version>3.5.1</version> |
|
</dependency> |
- 配置 MapperScan 注解
|
@SpringBootApplication |
|
@MapperScan("io.github.xxyopen.novel.dao.mapper") |
|
public class NovelApplication { |
|
|
|
public static void main(String[] args) { |
|
SpringApplication.run(NovelApplication.class, args); |
|
} |
|
|
|
} |
-
因为我们系统涉及分页数据查询,所以我们还需要在
io.github.xxyopen.novel.core.config
包下配置 mybatis-plus 的分页插件:
|
/** |
|
* Mybatis-Plus 配置类 |
|
* |
|
* @author xiongxiaoyang |
|
* @date 2022/5/16 |
|
*/ |
|
|
|
public class MybatisPlusConfig { |
|
|
|
/** |
|
* 分页插件 |
|
*/ |
|
|
|
public MybatisPlusInterceptor mybatisPlusInterceptor() { |
|
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); |
|
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); |
|
return interceptor; |
|
} |
|
|
|
} |
- 数据源配置
YAML 是 JSON 的超集,一种用于指定分层配置数据的便捷格式。本项目中我们统一使用 YAML 格式的配置文件,所以先将 resources 目录下的 application.properties 文件重命名为 application.yml,
然后在 application.yml 配置文件中加入以下数据源配置:
|
spring: |
|
datasource: |
|
url: jdbc:mysql://localhost:3306/novel?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai |
|
username: root |
|
password: test123456 |
注:根据实际的数据库环境来修改相应的IP、端口号、数据库名、用户名和密码
-
为了兼容 Spring Boot 3(Spring 6),在
org.springframework.core
包下创建NestedIOException
异常类
|
/** |
|
* 兼容 mybatis-plus 3.5.1 |
|
* mybatis-plus 的 MybatisSqlSessionFactoryBean 中使用到了这个异常 |
|
* Spring 6 开始移除了该异常 |
|
* |
|
* @author xiongxiaoyang |
|
* @date 2022/5/12 |
|
*/ |
|
public class NestedIOException extends IOException { |
|
|
|
} |
代码生成器 Mybatis-Plus-Generator 集成
- 添加相关依赖
|
<dependency> |
|
<groupId>com.baomidou</groupId> |
|
<artifactId>mybatis-plus-generator</artifactId> |
|
<version>${mybatis-plus.version}</version> |
|
<scope>test</scope> |
|
</dependency> |
|
<dependency> |
|
<groupId>org.apache.velocity</groupId> |
|
<artifactId>velocity-engine-core</artifactId> |
|
<version>2.3</version> |
|
<scope>test</scope> |
|
</dependency> |
- 在 test/resources/templates 下面创建以下模版文件
- 在 test/java 下面创建代码生成器类
|
/** |
|
* 代码生成器 |
|
* |
|
* @author xiongxiaoyang |
|
* @date 2022/5/11 |
|
*/ |
|
public class Generator { |
|
|
|
private static final String USERNAME = System.getenv().get("USER"); |
|
|
|
/** |
|
* 项目信息 |
|
*/ |
|
private static final String PROJECT_PATH = System.getProperty("user.dir"); |
|
private static final String JAVA_PATH = "/src/main/java"; |
|
private static final String RESOURCE_PATH = "/src/main/resources"; |
|
private static final String BASE_PACKAGE = "io.github.xxyopen.novel"; |
|
|
|
/** |
|
* 数据库信息 |
|
*/ |
|
private static final String DATABASE_IP = "127.0.0.1"; |
|
private static final String DATABASE_PORT = "3306"; |
|
private static final String DATABASE_NAME = "novel"; |
|
private static final String DATABASE_USERNAME = "root"; |
|
private static final String DATABASE_PASSWORD = "test123456"; |
|
|
|
|
|
public static void main(String[] args) { |
|
|
|
// 传入需要生成的表名,多个用英文逗号分隔,所有用 all 表示 |
|
genCode("sys_user"); |
|
|
|
} |
|
|
|
|
|
/** |
|
* 代码生成 |
|
*/ |
|
private static void genCode(String tables) { |
|
|
|
// 全局配置 |
|
FastAutoGenerator.create(String.format("jdbc:mysql://%s:%s/%s?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai", DATABASE_IP, DATABASE_PORT, DATABASE_NAME), DATABASE_USERNAME, DATABASE_PASSWORD) |
|
.globalConfig(builder -> { |
|
builder.author(USERNAME) // 设置作者 |
|
.fileOverride() |
|
// kotlin |
|
//.enableSwagger() // 开启 swagger 模式 |
|
.fileOverride() // 覆盖已生成文件 |
|
.commentDate("yyyy/MM/dd") |
|
.outputDir(PROJECT_PATH + JAVA_PATH); // 指定输出目录 |
|
}) |
|
// 包配置 |
|
.packageConfig(builder -> builder.parent(BASE_PACKAGE) // 设置父包名 |
|
.entity("dao.entity") |
|
.service("service") |
|
.serviceImpl("service.impl") |
|
.mapper("dao.mapper") |
|
.controller("controller.front") |
|
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, PROJECT_PATH + RESOURCE_PATH + "/mapper"))) |
|
// 模版配置 |
|
.templateConfig(builder -> builder.disable(TemplateType.SERVICE) |
|
.disable(TemplateType.SERVICEIMPL) |
|
.disable(TemplateType.CONTROLLER)) |
|
// 策略配置 |
|
.strategyConfig(builder -> builder.addInclude(getTables(tables)) // 设置需要生成的表名 |
|
.controllerBuilder() |
|
.enableRestStyle() |
|
.serviceBuilder() |
|
.formatServiceFileName("%sService") |
|
) // 开启生成@RestController 控制器 |
|
//.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 |
|
.execute(); |
|
|
|
} |
|
|
|
/** |
|
* 处理 all 和多表情况 |
|
*/ |
|
protected static List<String> getTables(String tables) { |
|
return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(",")); |
|
} |
|
|
|
} |
- 修改 Generator 类中数据库相关配置,选择我们需要创建的表名(all),运行 main 方法生成代码
原文链接:https://www.cnblogs.com/xxyopen/p/16322772.html
最新更新
手把手教你使用 Spring Boot 3 开发上线一个
Spring Boot 3 开发上线一个前后端分离的生
Spring Boot 3 开发上线一个前后端分离的生
Spring Boot 3 开发上线一个前后端分离的生
手把手教你使用 Spring Boot 3 开发上线一个
手把手教你使用 Spring Boot 3 开发上线一个
C# 添加文本、图片到PDF文档(基于Spire.
C# 将PDF转为Word、Html、XPS、SVG、PCL、PS——
C# /VB.NET操作Word批注(一)—— 插入、修
C# /VB.NET 创建PDF项目符号列表和多级编号
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
链接服务器读取Mysql---出现消息 7347,级别
SQL Server解惑——为什么你拼接的SQL语句换
MySQL视图了解一下
laf.js - 开源的云开发框架(README.md)
javascript创建对象
Node.js 源码分析 - 从 main 函数开始
Node.js 源码分析 - 原生模块(C++模块)的注册
ECharts图标中用的js相关的处理方法
GoJS 使用笔记
单元测试 - 测试场景记录
Node.js 源码分析 - 加载 js 文件
ES6入门
聊聊动效降级