共计 13273 个字符,预计需要花费 34 分钟才能阅读完成。
3. 集成 Mybatis Plus
3.1 配置根底依赖⚙️
👉首先,我的项目中会应用到 mysql、mybatis-plus、druid 数据连接池等等性能,接下来咱们就一一解说一下。
依赖名称 | 依赖形容 | 版本 |
---|---|---|
mysql-connector-java:mysql-connector-java | mysql 驱动 | 8.0.29 |
com.alibaba:druid | 阿里巴巴 Druid 数据库连接池 | 1.2.11 |
com.baomidou:mybatis-plus-boot-starter | mybatis-plus 的依赖 | 3.5.2 |
com.baomidou:mybatis-plus-generator | mybatis-plus 的主动生成代码插件 | 3.5.2 |
org.apache.velocity:velocity-engine-core | Java 的模板引擎框架,用于代码主动生成 | 2.3 |
org.projectlombok:lombok | 代码简化,getter/setter、结构器编译时生成 | 1.18.24 |
com.alibaba:fastjson | 阿里巴巴 Json 操作工具类 | 2.0.7 |
残缺的 pom.xml 文件如下:👇
<?xml version="1.0" encoding="UTF-8"?> | |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<parent> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-parent</artifactId> | |
<version>2.3.12.RELEASE</version> | |
<relativePath/> <!-- lookup parent from repository --> | |
</parent> | |
<groupId>com.maple</groupId> | |
<artifactId>maple-demo</artifactId> | |
<version>0.0.1-SNAPSHOT</version> | |
<name>maple-demo</name> | |
<description>Demo project for Spring Boot</description> | |
<properties> | |
<java-version>1.8</java-version> | |
<lombok-version>1.18.24</lombok-version> | |
<druid-version>1.2.11</druid-version> | |
<mybatis-plus-version>3.5.2</mybatis-plus-version> | |
<velocity-version>2.3</velocity-version> | |
<fastjson-version>2.0.7</fastjson-version> | |
<mysql-connector-version>8.0.29</mysql-connector-version> | |
</properties> | |
<dependencies> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-test</artifactId> | |
<scope>test</scope> | |
<exclusions> | |
<exclusion> | |
<groupId>org.junit.vintage</groupId> | |
<artifactId>junit-vintage-engine</artifactId> | |
</exclusion> | |
</exclusions> | |
</dependency> | |
<!-- 引入 web 相干 --> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-web</artifactId> | |
</dependency> | |
<!-- 应用 Mysql 数据库 --> | |
<dependency> | |
<groupId>mysql</groupId> | |
<artifactId>mysql-connector-java</artifactId> | |
<version>${mysql-connector-version}</version> | |
</dependency> | |
<!-- 应用阿里巴巴 druid 数据库连接池 --> | |
<dependency> | |
<groupId>com.alibaba</groupId> | |
<artifactId>druid-spring-boot-starter</artifactId> | |
<version>${druid-version}</version> | |
</dependency> | |
<!-- mybatis-plus 的依赖 --> | |
<dependency> | |
<groupId>com.baomidou</groupId> | |
<artifactId>mybatis-plus-boot-starter</artifactId> | |
<version>${mybatis-plus-version}</version> | |
</dependency> | |
<!-- mybatis-plus 的主动生成代码插件 --> | |
<dependency> | |
<groupId>com.baomidou</groupId> | |
<artifactId>mybatis-plus-generator</artifactId> | |
<version>${mybatis-plus-version}</version> | |
</dependency> | |
<dependency> | |
<groupId>org.apache.velocity</groupId> | |
<artifactId>velocity-engine-core</artifactId> | |
<version>${velocity-version}</version> | |
</dependency> | |
<!--Lombok 治理 Getter/Setter/log 等 --> | |
<dependency> | |
<groupId>org.projectlombok</groupId> | |
<artifactId>lombok</artifactId> | |
<scope>provided</scope> | |
<version>${lombok-version}</version> | |
</dependency> | |
<!-- 解决 JSON --> | |
<dependency> | |
<groupId>com.alibaba</groupId> | |
<artifactId>fastjson</artifactId> | |
<version>${fastjson-version}</version> | |
</dependency> | |
</dependencies> | |
<build> | |
<plugins> | |
<plugin> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-maven-plugin</artifactId> | |
</plugin> | |
</plugins> | |
</build> | |
</project> |
3.2 引入 Mysql 配置
👉首先咱们须要创立一个 Mysql 数据库 maple,字符集抉择 utf8。这里咱们应用的工具是 Navicat Premium 11。当然其余工具都是一样,没有特使要求。
👉创立一张 usc_user 表,当然有很多字段咱们可能暂且不须要,暂且保留,sql 如下:👇
CREATE TABLE `usc_user` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户 ID', | |
`account` varchar(30) DEFAULT NULL COMMENT '用户账号', | |
`user_name` varchar(30) DEFAULT NULL COMMENT '用户姓名', | |
`nick_name` varchar(30) DEFAULT NULL COMMENT '用户昵称', | |
`user_type` varchar(2) DEFAULT '00' COMMENT '用户类型(00 零碎用户,01 小程序用户)', | |
`email` varchar(50) DEFAULT ''COMMENT' 用户邮箱 ', | |
`phone` varchar(11) DEFAULT ''COMMENT' 手机号码 ', | |
`sex` char(1) DEFAULT '0' COMMENT '用户性别(0 男 1 女 2 未知)', | |
`avatar` varchar(100) DEFAULT ''COMMENT' 头像地址 ', | |
`salt` varchar(32) DEFAULT NULL COMMENT '用户加密盐值', | |
`password` varchar(100) DEFAULT ''COMMENT' 明码 ', | |
`status` char(1) DEFAULT '0' COMMENT '帐号状态(0 失常 1 停用)', | |
`create_id` bigint(20) DEFAULT NULL COMMENT '创建人 id', | |
`create_name` varchar(64) DEFAULT ''COMMENT' 创建者 ', | |
`create_time` datetime DEFAULT NULL COMMENT '创立工夫', | |
`update_id` bigint(20) DEFAULT NULL COMMENT '更新人 id', | |
`update_name` varchar(64) DEFAULT ''COMMENT' 更新者 ', | |
`update_time` datetime DEFAULT NULL COMMENT '更新工夫', | |
`delete_flag` tinyint(1) DEFAULT '0' COMMENT '删除标记', | |
`remark` varchar(500) DEFAULT NULL COMMENT '备注', | |
PRIMARY KEY (`id`) USING BTREE | |
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户核心 - 用户信息表'; |
👉创立好数据库后,配置咱们我的项目的 application.yml 文件
server: | |
port: 6666 | |
spring: | |
application: | |
name: maple-admin | |
# 配置数据库连贯 | |
datasource: | |
# 数据库连贯地址及罕用配置 | |
url: jdbc:mysql://127.0.0.1:3306/maple?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC | |
# 数据库连贯驱动 | |
driverClassName: com.mysql.cj.jdbc.Driver | |
# 数据库用户 | |
username: root | |
# 数据库用户明码 | |
password: 123456 | |
# 配置 druid 数据库连接池 --------------------------------------- | |
type: com.alibaba.druid.pool.DruidDataSource | |
druid: | |
# 初始化大小,最小,最大 | |
initialSize: 5 | |
minIdle: 5 | |
maxActive: 20 | |
# 配置获取连贯期待超时的工夫 | |
maxWait: 60000 | |
# 配置距离多久才进行一次检测,检测须要敞开的闲暇连贯,单位是毫秒 | |
timeBetweenEvictionRunsMillis: 60000 | |
# 配置一个连贯在池中最小生存的工夫,单位是毫秒 | |
minEvictableIdleTimeMillis: 300000 | |
# 校验 SQL,Oracle 配置 spring.datasource.validationQuery=SELECT 1 FROM DUAL,如果不配 validationQuery 项,则上面三项配置无用 | |
validationQuery: SELECT 'x' | |
testWhileIdle: true | |
testOnBorrow: false | |
testOnReturn: false | |
# 关上 PSCache,并且指定每个连贯上 PSCache 的大小 | |
poolPreparedStatements: true | |
maxPoolPreparedStatementPerConnectionSize: 20 | |
# 配置监控统计拦挡的 filters,去掉后监控界面 sql 无奈统计,'wall' 用于防火墙 | |
filters: stat,wall | |
# 通过 connectProperties 属性来关上 mergeSql 性能;慢 SQL 记录 | |
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 | |
# 合并多个 DruidDataSource 的监控数据 | |
useGlobalDataSourceStat: true | |
# 配置 mybatis-plus 的 xml 和 bean 的目录 | |
mybatis-plus: | |
mapper-locations: classpath:mapper/*.xml | |
configuration: | |
# 开启驼峰性能 | |
map-underscore-to-camel-case: true | |
# 日志打印性能 | |
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl | |
#逻辑删除配置 | |
global-config: | |
db-config: | |
# 逻辑已删除值 (默认为 1) | |
logic-delete-value: 1 | |
# 逻辑未删除值 (默认为 0) | |
logic-not-delete-value: 0 |
至此,咱们的数据库配置曾经实现✌。接下来咱们配置一下 Mybatis-plus。
3.3 引入 MyBatis-Plus 配置
配置 MyBatis-Plus
- MyBatis 是一款优良的长久层框架,它反对自定义 SQL、存储过程以及高级映射。MyBatis 罢黜了简直所有的 JDBC 代码以及设置参数和获取后果集的工作。MyBatis 能够通过简略的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,一般老式 Java 对象)为数据库中的记录。
- MyBatis-Plus 是基于 MyBatis 框架进一步的封装,加强了 MyBatis 的性能,只需简略配置,即可疾速进行单表 CRUD 操作,从而节俭大量工夫,以及一些常用工具的封装。
- MyBatis 中文文档地址:https://mybatis.org/mybatis-3/zh/index.html
- MyBatis-Plus 官网地址:https://baomidou.com/
接下来咱们就一起配置一下 MyBatis-Plus:
这里咱们会应用 Mybatis-plus 生成代码、分页、逻辑删除、常用字段主动注入数据等插件。
👉首先是 application.yml
# 配置 mybatis-plus 的 xml 和 bean 的目录 | |
mybatis-plus: | |
mapper-locations: classpath:mapper/*.xml | |
configuration: | |
map-underscore-to-camel-case: true # 开启驼峰性能 | |
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 日志打印性能 | |
global-config: #逻辑删除配置 | |
db-config: | |
logic-delete-value: 1 # 逻辑已删除值 (默认为 1) | |
logic-not-delete-value: 0 # 逻辑未删除值 (默认为 0) |
而后咱们在 com.maple.demo 下创立 config 目录寄存咱们的系统配置,在 config 目录创立 MybatisPlusConfig.java 文件
这里配置下 Mybaits 的主动填充机制和 druid 监控页面
package com.maple.demo.config; | |
import com.alibaba.druid.support.http.StatViewServlet; | |
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; | |
import org.apache.ibatis.reflection.MetaObject; | |
import org.mybatis.spring.annotation.MapperScan; | |
import org.springframework.boot.web.servlet.ServletRegistrationBean; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.Configuration; | |
import org.springframework.transaction.annotation.EnableTransactionManagement; | |
import javax.servlet.Servlet; | |
import java.util.Date; | |
/** | |
* Mybatis plus 配置 | |
* | |
* @author 笑小枫 | |
* @date 2022/7/10 | |
*/ | |
@EnableTransactionManagement | |
@Configuration | |
@MapperScan("com.maple.demo.mapper") | |
public class MybatisPlusConfig implements MetaObjectHandler { | |
/** | |
* 新增时, 主动填充数据 | |
*/ | |
@Override | |
public void insertFill(MetaObject metaObject) {this.setFieldValByName("isDeleted", false, metaObject); | |
this.setFieldValByName("createId", 1L, metaObject); | |
this.setFieldValByName("createName", "占位符", metaObject); | |
this.setFieldValByName("createTime", new Date(), metaObject); | |
this.setFieldValByName("updateId", 1L, metaObject); | |
this.setFieldValByName("updateName", "占位符", metaObject); | |
this.setFieldValByName("updateTime", new Date(), metaObject); | |
} | |
/** | |
* 批改时,主动填充数据 | |
*/ | |
@Override | |
public void updateFill(MetaObject metaObject) {this.setFieldValByName("updateId", 1L, metaObject); | |
this.setFieldValByName("updateName", "占位符", metaObject); | |
this.setFieldValByName("updateTime", new Date(), metaObject); | |
} | |
/** | |
* 配置 druid 监控服务器 | |
* | |
* @return 返回监控注册的 servlet 对象 | |
*/ | |
@Bean | |
public ServletRegistrationBean<Servlet> statViewServlet() {ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); | |
// 增加 IP 白名单,如果不须要黑名单、白名单的性能,正文掉即可 | |
servletRegistrationBean.addInitParameter("allow", "192.168.25.125,127.0.0.1"); | |
// 增加 IP 黑名单,当白名单和黑名单反复时,黑名单优先级更高 | |
servletRegistrationBean.addInitParameter("deny", "192.168.25.123"); | |
// 增加控制台治理用户 | |
servletRegistrationBean.addInitParameter("loginUsername", "druid"); | |
servletRegistrationBean.addInitParameter("loginPassword", "123456"); | |
// 是否可能重置数据 | |
servletRegistrationBean.addInitParameter("resetEnable", "false"); | |
return servletRegistrationBean; | |
} | |
} |
其中,createId、createName 临时应用占位符,前期联合登录后从 JWT 外面获取。
配置主动生成代码插件
👉首先创立 BaseEntity.java
,所有的实体类都继承该对象,用于寄存零碎字段,代码如下👇
package com.maple.demo.config.bean; | |
import com.baomidou.mybatisplus.annotation.FieldFill; | |
import com.baomidou.mybatisplus.annotation.IdType; | |
import com.baomidou.mybatisplus.annotation.TableField; | |
import com.baomidou.mybatisplus.annotation.TableId; | |
import io.swagger.annotations.ApiModelProperty; | |
import lombok.Data; | |
import java.io.Serializable; | |
import java.util.Date; | |
/** | |
* @author 笑小枫 | |
* @date 2022/7/11 | |
*/ | |
@Data | |
public class BaseEntity implements Serializable {@TableId(type = IdType.AUTO) | |
protected Long id; | |
@ApiModelProperty("创建人 id") | |
@TableField(value = "create_id", fill = FieldFill.INSERT) | |
private Long createId; | |
@ApiModelProperty("创建人名称") | |
@TableField(value = "create_name", fill = FieldFill.INSERT) | |
private String createName; | |
@ApiModelProperty("创立工夫") | |
@TableField(value = "create_time", fill = FieldFill.INSERT) | |
private Date createTime; | |
@ApiModelProperty("更新人 id") | |
@TableField(value = "update_id", fill = FieldFill.INSERT_UPDATE) | |
private Long updateId; | |
@ApiModelProperty("更新人名称") | |
@TableField(value = "update_name", fill = FieldFill.INSERT_UPDATE) | |
private String updateName; | |
@ApiModelProperty("更新工夫") | |
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) | |
private Date updateTime; | |
} |
👉配置 MyBatis-Plus 代码生成工具,在 com.maple.demo 目录下创立 util 目录,用于寄存工具类。
而后创立 Generator.java,代码如下:👇
package com.maple.demo.util; | |
import com.baomidou.mybatisplus.generator.FastAutoGenerator; | |
import com.maple.demo.config.bean.BaseEntity; | |
/** | |
* MyBatis-Plus 代码生成工具 | |
* | |
* @author 笑小枫 | |
* @date 2019/4/25 | |
*/ | |
public class Generator {public static void main(String[] args) { | |
// 设置作者 | |
String auth = "笑小枫"; | |
// 设置父包名 | |
String packageName = "com.maple.demo"; | |
// 设置父包模块名 | |
String moduleName = ""; | |
// 指定输入目录 | |
String path = "D:"; | |
String url = "jdbc:mysql://127.0.0.1:3306/maple?useUnicode=true&useSSL=false&characterEncoding=utf8"; | |
String username = "root"; | |
String password = "Zhang123"; | |
// 设置须要生成的表名 | |
String table = "usc_user"; | |
// 设置过滤表前缀 | |
String[] tablePrefix = {"usc_", "sys_"}; | |
generateTest(auth, packageName, path, moduleName, url, username, password, table, tablePrefix); | |
} | |
private static void generateTest(String auth, String packageName, String path, String moduleName, | |
String url, String username, String password, String table, String[] tablePrefix) {FastAutoGenerator.create(url, username, password) | |
.globalConfig(builder -> builder.author(auth) | |
// 开启 swagger 模式 | |
.enableSwagger() | |
.outputDir(path)) | |
.packageConfig(builder -> builder.parent(packageName) | |
.moduleName(moduleName) | |
// 设置 mapperXml 生成门路 | |
//.pathInfo(Collections.singletonMap(OutputFile.xml, path)) | |
) | |
.strategyConfig(builder -> builder.addInclude(table) | |
.addTablePrefix(tablePrefix) | |
.entityBuilder().superClass(BaseEntity.class).enableLombok().logicDeleteColumnName("delete_flag") | |
.controllerBuilder().enableRestStyle() | |
) | |
.execute();} | |
} |
留神:实用版本:mybatis-plus-generator 3.5.1 及其以上版本,对历史版本不兼容!3.5.1 以下的请参考代码生成器旧
- superClass(BaseEntity.class):entity 应用父类 BaseEntity.class,缩小 id、创建人、批改人等零碎字段
- .enableSwagger():咱们配置了 knife4j,所以咱们开启 swagger 模式,这样会主动生成一些 swagger 的注解
- logicDeleteColumnName(“delete_flag”):开启逻辑删除
- enableLombok():我的项目应用 lombok,缩小 getter/setter 代码的编写,应用插件编译时主动生成
- controllerBuilder().enableRestStyle():controller 应用 Rest 代码格调
👉而后咱们执行该 Main 办法
而后会在配置的目录下生成 com 文件夹,本文的在 D:盘下。
咱们将代码复制到咱们的我的项目中,此时的我的项目代码构造如下如:👇
3.3 功能测试👌
编写一个测试用例测试一下吧
在 UserController.java 文件中增加新增用户和依据 ID 查问用户信息的接口👇
package com.maple.demo.controller; | |
import com.maple.demo.entity.User; | |
import com.maple.demo.service.IUserService; | |
import io.swagger.annotations.Api; | |
import io.swagger.annotations.ApiOperation; | |
import lombok.AllArgsConstructor; | |
import org.springframework.web.bind.annotation.*; | |
/** | |
* <p> | |
* 用户核心 - 用户信息表 前端控制器 | |
* </p> | |
* | |
* @author 笑小枫 | |
* @since 2022-07-11 | |
*/ | |
@RestController | |
@RequestMapping("/user") | |
@AllArgsConstructor | |
@Api(tags = "用户信息管理") | |
public class UserController { | |
private final IUserService userService; | |
@ApiOperation(value = "插入用户信息") | |
@PostMapping("/insert") | |
public User insert(@RequestBody User user){userService.save(user); | |
return user; | |
} | |
@ApiOperation(value = "依据用户 ID 查问用户信息") | |
@GetMapping("/selectById") | |
public User selectById(Long userId){return userService.getById(userId); | |
} | |
} |
这是咱们在关上咱们的 Knife4j,能够在 Swagger Models 外面看到咱们增加的 User 对象👇
在用户信息管理外面能够看到咱们的接口信息,咱们先调用一下插入方法。
参数咱们只保留简略的几个,如下👇
{ | |
"account": "xiaoxiaofeng", | |
"email": "1150640979@qq.com", | |
"nickName": "笑小枫", | |
"password": "123456", | |
"phone": "18300000000", | |
"userName": "笑小枫" | |
} |
调用后果如下图所示👇
能够看到数据外面,咱们的数据曾经插入进去了👇
接下来咱们调用查问接口看一下👇
OK,功败垂成✌️
咱们在上文中配置阿里巴巴的 Druid 数据库连接池,那么咱们怎么能够看一下咱们的 sql 执行状况呢?
能够在浏览器输出:http://127.0.0.1:6666/druid
在 SQL 监控中能够看到咱们的 sql 执行状况,以及一些慢 sql 的剖析👇
小结
好啦,本文就到这里了,咱们简略的总结一下,次要介绍了以下内容
- SpringBoot 集成 mysql 数据库
- 集成 Mybatis Plus 框架
- 通过一个简略的例子演示了一下应用 Mybatis Plus 进行数据插入和查问
- 应用 Knife4j 进行接口调试
- 集成阿里巴巴 Druid 数据连接池
- 通过 Druid 页面进行执行 sql 查问、剖析
本文源码:https://github.com/hack-feng/maple-demo