3. 集成Mybatis Plus

3.1 配置根底依赖⚙️

首先,我的项目中会应用到mysql、mybatis-plus、druid数据连接池等等性能,接下来咱们就一一解说一下。

依赖名称依赖形容版本
mysql-connector-java:mysql-connector-javamysql驱动8.0.29
com.alibaba:druid阿里巴巴Druid数据库连接池1.2.11
com.baomidou:mybatis-plus-boot-startermybatis-plus的依赖3.5.2
com.baomidou:mybatis-plus-generatormybatis-plus的主动生成代码插件3.5.2
org.apache.velocity:velocity-engine-coreJava 的模板引擎框架,用于代码主动生成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