【3】Spring Boot 3 集成mybatis-plus+druid+mysql

目录

  • [【3】Spring Boot 3 集成组件:Druid + Mybatis Plus + Mysql集成方案](#【3】Spring Boot 3 集成组件:Druid + Mybatis Plus + Mysql集成方案)
    • [1. Hikari + jdbc + mysql 集成方案](#1. Hikari + jdbc + mysql 集成方案)
    • [2. Druid + Mybatis Plus + Mysql集成方案](#2. Druid + Mybatis Plus + Mysql集成方案)
    • Ref

个人主页: 【⭐️个人主页

需要您的【💖 点赞+关注】支持 💯


【3】Spring Boot 3 集成组件:Druid + Mybatis Plus + Mysql集成方案

📖 本文核心知识点:

  • Hikari + jdbc + mysql 集成方案
  • Druid + Mybatis Plus + Mysql集成方案

本文中使用的spring boot版本是 3.1.5

1. Hikari + jdbc + mysql 集成方案

mysql + jdbc 是最基本的解决方案,适用于学习项目或者本地工具jar包中对数据的操作。

springboot 默认数据库 Hikari

springboot 内置式默认支持HiKari 数据库连接池的;在 DataSourceConfiguration 配置类 中我可以看到
默认引入创建了HikariDatasource ; hikari 号称是 最快的数据库连接池

增加依赖

Maven

xml 复制代码
	<dependency>
 		<groupId>org.springframework.boot</groupId>
       	 <artifactId>spring-boot-starter-data-jdbc</artifactId>
   	</dependency>

	<dependency>
	   <groupId>mysql</groupId>
	   <artifactId>mysql-connector-java</artifactId>
	   <version>8.0.33</version>
	</dependency>

Gradle

groovy 复制代码
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'mysql:mysql-connector-java:8.0.33'

添加配置

application.yaml

yaml 复制代码
spring:
  application:
    name: app
  datasource:
    username: root
    password: ***
    url: jdbc:mysql://localhost:3306/testdb?allowPublicKeyRetrieval=true&useSSL=false&useUnicode=true&charecterEncoding=utf8mb4&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
    driver-class-name: com.mysql.cj.jdbc.Driver
logging:
  level:
    org.springframework.jdbc.core: debug    

Spring Testng 测试用例

java 复制代码
@SpringBootTest( classes = {
        DataSourceAutoConfiguration.class,
        JdbcTemplateAutoConfiguration.class})
@EnableAutoConfiguration
@Slf4j
public class UnitTest extends AbstractTestNGSpringContextTests {


    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    public void testInfraApi() {
        assert jdbcTemplate != null;
        List<Map<String, Object>> maps =
                jdbcTemplate.queryForList("select * from sys_auth_user");
        log.info(maps.toString());
        Assert.assertNotNull(maps,"数据不能为空");
    }
}

2. Druid + Mybatis Plus + Mysql集成方案

2.1 配置Druid

alibaba Druid

对于数据源,spring-boot-starter-data-jdbc默认使用Hikar作为数据源

Hikar有着高效的性能,但是国内开发大都采用阿里的Druid

Druid是Java语言中综合最好的数据库连接池。Druid能够提供强大的监控和扩展功能;我们把springboot 默认的 数据库连接池 hikar 换成 Druid 。

使用 druid 数据库连接池的好处:

  • 开源,国内活跃度高
  • 性能好,国内号称是java里最好的数据库连接池
  • 功能多,提供了 sql统计sql过滤数据库密码加密等功能

数据库连接池 Druid 1.2.20 现已发布,这个版本修复大家比较关注的对 spring-boot3 的支持问题。建议按需升级。

Issues

修复 druid-spring-boot-3-starter 错误,并增加自动配置的适配文件 #5437 #5443

针对 mysql loadbalance 格式的 url,加上 connectTimeout 等属性的识别支持 #5396

修复 socketTimeout 参数不支持 mysql jdbcurl 里设置 socketTimeout=0 的场景 #5451

SQL Parser 增强对 MySQL 的支持 #5454

SQL Parser 增强对 PG 的支持 #5444

SQL Parser 增强对 MaxCompute 的支持

添加依赖

Maven

xml 复制代码
    <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-3-starter</artifactId>
            <version>1.2.20</version>
        </dependency>
         <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>

Gradle

groovy 复制代码
 implementation 'com.alibaba:druid-spring-boot-3-starter:1.2.20'
implementation 'mysql:mysql-connector-java:8.0.33'
配置
  1. 开启@EnableAutoConfiguration
java 复制代码
@EnableAutoConfiguration
public class StudySpring3Application
  1. 配置application.yaml 增加 druid配置
yaml 复制代码
  datasource:
    username: root
    password: ***
    url: jdbc:mysql://localhost:3306/testdb?allowPublicKeyRetrieval=true&useSSL=false&useUnicode=true&charecterEncoding=utf8mb4&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
    driver-class-name: com.mysql.cj.jdbc.Driver

    druid:
      url: jdbc:mysql://localhost:3306/testdb?allowPublicKeyRetrieval=true&useSSL=false&useUnicode=true&charecterEncoding=utf8mb4&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
      username: root
      password: ***
      driver-class-name: com.mysql.cj.jdbc.Driver
      db-type: com.alibaba.druid.pool.DruidDataSource
      # 连接池的配置信息
      # 初始化大小,最小,最大
      initial-size: 5
      min-idle: 5
      maxActive: 20
      # 配置获取连接等待超时的时间
      maxWait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
      #PS Cache只针对存储过程有效,能提升性能,mysql基本不考虑开启;oracle的话,如果有存储过程可以开启,如内存允许就可以把maxOpenPreparedStatements设置大一点,不如到100。
      poolPreparedStatements: false
      maxPoolPreparedStatementPerConnectionSize: 20
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filter:
        stat:
          merge-sql: true
          slow-sql-millis: 50
        wall:
        log4j:
          connection-log-enabled: true

      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
#      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      # 配置DruidStatFilter
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      web-stat-filter:
        enabled: true
        url-pattern: "/*"
        exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
      # 配置DruidStatViewServlet
      stat-view-servlet:
      	# 开启druid监控界面
        enabled: true
        url-pattern: "/druid/*"
        # IP白名单(没有配置或者为空,则允许所有访问)
        allow:
        # IP黑名单 (存在共同时,deny优先于allow)
        deny:
        #  禁用HTML页面上的"Reset All"功能
        reset-enable: false
        # 登录名
        login-username: admin
        # 登录密码
        login-password: 123456

PS Cache只针对存储过程有效,能提升性能,mysql基本不考虑开启;oracle的话,如果有存储过程可以开启,如内存允许就可以把maxOpenPreparedStatements设置大一点,不如到100。

启动Spring Boot Web Starter

访问localhost:8080/druid 登录账号

yaml 复制代码
		login-username: admin
        # 登录密码
        login-password: 123456
Spring Testng测试用例
java 复制代码
package com.kongxiang.infrastructure;


import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.util.List;
import java.util.Map;


/**
 * @author 孔翔
 * @since 2023-11-13
 * copyright for author : 孔翔 at 2023-11-13
 * study-spring3
 */

@SpringBootTest( classes = {
        DruidDataSourceAutoConfigure.class})
@EnableAutoConfiguration
@Slf4j
public class DruidDbSpringTest extends AbstractTestNGSpringContextTests {


    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    public void testInfraApi() {
        assert jdbcTemplate != null;
        List<Map<String, Object>> maps =
                jdbcTemplate.queryForList("select * from sys_auth_user");
        log.info(maps.toString());
        Assert.assertNotNull(maps,"数据不能为空");
    }
}

2.2 配置Mybatis-Plus

https://baomidou.com/

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

特性
  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
支持数据库

任何能使用 MyBatis 进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下,如果不在下列表查看分页部分教程 PR 您的支持。

  • MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb,informix,TDengine,redshift
  • 达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库,优炫数据库,星瑞格数据库
MybatisPlus依赖
xml 复制代码
 <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.4</version>
    </dependency>

Gradle

groovy 复制代码
implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.4'
配置
  1. application.yaml配置
yaml 复制代码
#-------------------------------------------- mybatis-plus ---------------------------------------------------

#mybatis-plus配置
mybatis-plus:
  #配置Mapper映射文件
  mapper-locations: classpath:/mapper/*.xml
  # 配置Mybatis数据返回类型别名(默认别名为类名)
  #type-aliases-package: com.yunnuo.server.pojo
  configuration:
    # 自动驼峰命名
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  #全局配置
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
      #table-prefix: t_
      id-type: auto
  #数据库实体类的包全路径,方便在mapper.xml中不许使用实体类的全路径,写类名就行(不区分大小写)
  type-aliases-package: com.kongxiang.raindrop.infrastructure.orm.mybatisplus.entity

🅰️ type-aliases-package 修改成自己的Entity Table目录

  1. Java Config 配置
    2.1 添加MapperScan注解
mybatis-plus开启打印sql日志

设置mybatis-plus的日志输出方式为slf4j

yaml 复制代码
mybatis-plus:
  #mapper-locations: classpath*:/mappings/**/*.xml
  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
    # LOG4J日志实现
#    log-impl: org.apache.ibatis.logging.log4j.Log4jImpl
#   log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl 在生产环境,不想打印 SQL 日志,可以通过下面的配置关闭。

Mybatis 代码生成器

Gradle 插件

Ref

整合Seata+多数据源+sharding-jdbc https://blog.csdn.net/qq_38225558/article/details/130624065

相关推荐
·云扬·26 分钟前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
biyezuopinvip31 分钟前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
JavaGuide1 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
figo10tf2 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva2 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
橙露2 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
程序员敲代码吗2 小时前
Spring Boot与Tomcat整合的内部机制与优化
spring boot·后端·tomcat
筵陌2 小时前
MySQL索引及其底层原理(上)
mysql
NuageL2 小时前
原始Json字符串转化为Java对象列表/把中文键名变成英文键名
java·spring boot·json
怣502 小时前
MySQL子查询零基础入门教程:从小白到上手(零基础入门版)
数据库·mysql