【笑小枫的SpringBoot系列】【三】SpringBoot集成Mybatis Plus 您所在的位置:网站首页 mybatis添加 【笑小枫的SpringBoot系列】【三】SpringBoot集成Mybatis Plus

【笑小枫的SpringBoot系列】【三】SpringBoot集成Mybatis Plus

#【笑小枫的SpringBoot系列】【三】SpringBoot集成Mybatis Plus| 来源: 网络整理| 查看: 265

3. 集成Mybatis Plus3.1 配置基础依赖⚙️

首先,项目中会使用到mysql、mybatis-plus、druid数据连接池等等功能,接下来我们就一一讲解一下。

依赖名称依赖描述版本mysql-connector-java:mysql-connector-javamysql驱动8.0.29com.alibaba:druid阿里巴巴Druid数据库连接池1.2.11com.baomidou:mybatis-plus-boot-startermybatis-plus的依赖3.5.2com.baomidou:mybatis-plus-generatormybatis-plus的自动生成代码插件3.5.2org.apache.velocity:velocity-engine-coreJava 的模板引擎框架,用于代码自动生成2.3org.projectlombok:lombok代码简化,getter/setter、构造器编译时生成1.18.24com.alibaba:fastjson阿里巴巴Json操作工具类2.0.7

完整的pom.xml文件如下:

4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.12.RELEASE com.maple maple-demo 0.0.1-SNAPSHOT maple-demo Demo project for Spring Boot 1.8 1.18.24 1.2.11 3.5.2 2.3 2.0.7 8.0.29 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.springframework.boot spring-boot-starter-web mysql mysql-connector-java ${mysql-connector-version} com.alibaba druid-spring-boot-starter ${druid-version} com.baomidou mybatis-plus-boot-starter ${mybatis-plus-version} com.baomidou mybatis-plus-generator ${mybatis-plus-version} org.apache.velocity velocity-engine-core ${velocity-version} org.projectlombok lombok provided ${lombok-version} com.alibaba fastjson ${fastjson-version} org.springframework.boot spring-boot-maven-plugin 3.2 引入Mysql配置

首先我们需要创建一个Mysql数据库maple,字符集选择utf8。这里我们使用的工具是Navicat Premium 11。当然其他工具都是一样,没有特使要求。

image-20220710141353991

创建一张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.stargeSql=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-PlusMyBatis 是一款优秀的持久层框架,它支持自定义 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 statViewServlet() { ServletRegistrationBean 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方法

image-20220711163747350

然后会在配置的目录下生成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.*; /** *

* 用户中心-用户信息表 前端控制器 *

* * @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对象

image-20220711214628173

在用户信息管理里面可以看到我们的接口信息,我们先调用一下插入方法。

参数我们只保留简单的几个,如下

{ "account": "xiaoxiaofeng", "email": "[email protected]", "nickName": "笑小枫", "password": "123456", "phone": "18300000000", "userName": "笑小枫" }

调用结果如下图所示

image-20220711214940096

可以看到数据里面,我们的数据已经插入进去了

image-20220711220037702

接下来我们调用查询接口看一下

image-20220711220216123

OK,大功告成✌️

我们在上文中配置阿里巴巴的Druid数据库连接池,那么我们怎么可以看一下我们的sql执行情况呢?

可以在浏览器输入:http://127.0.0.1:6666/druid

在SQL监控中可以看到我们的sql执行情况,以及一些慢sql的分析

image-20220711221854172小结

好啦,本文就到这里了,我们简单的总结一下,主要介绍了以下内容

SpringBoot集成mysql数据库集成Mybatis Plus框架通过一个简单的例子演示了一下使用Mybatis Plus进行数据插入和查询使用Knife4j进行接口调试集成阿里巴巴Druid数据连接池通过Druid页面进行执行sql查询、分析



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有