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: 6666spring: 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 */@Datapublic 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