SpringBoot整合MySQL和Druid

SpringBoot整合MySQL和Druid

1.前言☕

大家好,我是Leo哥🫣🫣🫣,今天给大家带来关于精品SpringBoot专栏,暂且就给他起名为循序渐进学SpringBoot,这里我参考了我上一个专栏:循序渐进学SpringSecurity6。有需要的朋友可以抓紧学习来哈,带你从SpringSecurity从零到实战项目。好了,我们进入正题,为什么会有SpringBoot这个专栏呢,是这样的,今年Leo哥也是正在重塑知识体系,从基础到框架,而SpringBoot又是我们框架中的核心,我觉得很有必要通过以博客的形式将我的知识系列进行输出,同时也锻炼一下自己的写作能力,如果能帮到大家那就更好啦!!!本地系列教程会从SpringBoot基础讲起,会以知识点+实例+项目的学习模式由浅入深对Spring Boot框架进行学习&使用。好了,话不多说让我们开始吧😎😎😎。

2.MySQL 简介

官网:dev.mysql.com/

MySQL 是目前项目中运用最广泛的关系型数据库,无论是互联网大厂,还是中小型公司,几乎都在用。

MySQL 体积小、速度快、源码开放,所以广受开发者喜爱。

MySQL 的安装非常简单,针对不同的操作系统,MySQL 都提供了安装包的下载。

3.安装MySQL

MySQL安装方式有多种,有安装版和绿色版安装。

这里Leo哥推荐绿色版进行安装,可以看我 这篇文章

4.SpringBoot整合MySQL

4.1 SpringBoot项目

这里我们通过Maven工程进行创建SpringBoot项目

4.2 添加依赖

对应pom.xml文件中的代码:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

4.3 创建数据库以及表

然后开始创建表。

SQL语句:

sql 复制代码
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `name` varchar(255) NOT NULL COMMENT '用户名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `sex` varchar(2) DEFAULT NULL COMMENT '性别',
  `address` varchar(255) DEFAULT NULL COMMENT '住址',
  `avatar` varchar(255) DEFAULT NULL COMMENT '头像',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8;

然后添加一些测试数据:

sql 复制代码
INSERT INTO `user` (`name`, `age`, `sex`, `address`, `avatar`) VALUES
('张三', 20, '男', '北京市朝阳区', 'avatar1.jpg'),
('李四', 22, '男', '上海市浦东新区', 'avatar2.jpg'),
('王五', 24, '女', '深圳市南山区', 'avatar3.jpg'),
('赵六', 26, '女', '广州市天河区', 'avatar4.jpg'),
('孙七', 28, '男', '成都市武侯区', 'avatar5.jpg'),
('周八', 30, '女', '杭州市江干区', 'avatar6.jpg'),
('吴九', 32, '男', '重庆市渝北区', 'avatar7.jpg'),
('郑十', 34, '女', '天津市和平区', 'avatar8.jpg'),
('朱十一', 21, '男', '苏州市姑苏区', 'avatar9.jpg'),
('黄十二', 23, '女', '武汉市洪山区', 'avatar10.jpg'),
('吕十三', 25, '男', '南京市鼓楼区', 'avatar11.jpg'),
('王十四', 27, '女', '西安市碑林区', 'avatar12.jpg'),
('李十五', 29, '男', '长沙市岳麓区', 'avatar13.jpg'),
('张十六', 31, '女', '福州市台江区', 'avatar14.jpg'),
('陈十七', 33, '男', '哈尔滨市南岗区', 'avatar15.jpg'),
('林十八', 35, '女', '沈阳市和平区', 'avatar16.jpg'),
('赵十九', 37, '男', '济南市历下区', 'avatar17.jpg'),
('黄二十', 39, '女', '青岛市市南区', 'avatar18.jpg'),
('周二十一', 41, '男', '合肥市瑶海区', 'avatar19.jpg'),
('吴二十二', 43, '女', '大连市中山区', 'avatar20.jpg');

按照Leo哥的步骤一步一步来肯定不会出错,如果哪里有疑问,也欢迎大家评论区留言!

4.4 配置信息

在 application.yml 文件中添加数据库链接驱动信息。

yml 复制代码
server:
  port: 8201


spring:
  datasource:
    url: jdbc:mysql://localhost:3306/leo-springboot-tutorial?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
    username: root
    password: root  #数据库名、用户名和密码改为自己的
    driver-class-name: com.mysql.cj.jdbc.Driver

4.5 新建其他类

创建实体类

在此之前首先添加lombok依赖。

xml 复制代码
<dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
</dependency>
java 复制代码
/**
 * @author : Leo
 * @version 1.0
 * @date 2024-03-01 20:26
 * @description : User实体类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    private Integer id;

    private String name;

    private Integer age;

    private String sex;

    private String address;

    private String avatar;

}

4.5 测试

添加写测试用例之前,我们先在pom依赖中引入jdbc starter,目的是使用JDBC模板接口。

java 复制代码
/**
     *  用于测试: 连接MySQL
     */
    @Test
    public void test01() {
        String sql ="select * from user";
        List<User> users = jdbcTemplate.query(sql, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet rs, int rowNum) throws SQLException {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setAge(rs.getInt("age"));
                user.setName(rs.getString("name"));
                user.setSex(rs.getString("sex"));
                user.setAddress(rs.getString("address"));
                user.setAvatar(rs.getString("avatar"));
                return user;
            }
        });
        log.info("查询成功");
        users.forEach(p->{
            log.info("用户{}",p);
        });
    }

可以看出来,用户已经都查询出来了。说明我们连接MySQL大功告成!

4.6 小结

  • @SpringBootTest 注解能够测试我们的项目主类,该项目为 ConnectMysqlDemoApplication。
  • @Test 注解是 junit 单元测试的注解,表示该方法为测试方法。
  • JdbcTemplate 一个通过 JDBC 连接数据库的工具类,spring-boot-starter-jdbc 依赖中包含了该类。
  • @Resource 注解会帮我们在 Spring Boot 启动的时候注入一个 JdbcTemplate 的对象。
  • jdbcTemplate.query() 方法通过 SQL 语句和匿名内部类参数的形式,执行 SQL 并查询结果集。
  • RowMapper 就是查询到的每一行数据对象,我们可以通过重写 mapRow 方法将数据结果集封装到 User 对象上。

5.Navicat连接MySQL

Navicat是我从大学就在用的一个 MySQL客户端工具,简介美观的界面让人爱不释手。

我们如何连接我们自己的数据库呢,其实非常简单,只需要填写填写主机 IP 地址、端口、用户名和密码即可。

6.Intellij IDEA 连接 MySQL

除了 Navicat,还可以使用 Intellij IDEA 直连 MySQL。

点开IDEA右侧栏的database,然后选择添加数据源选择MySQL。

填写你的用户名密码以及你要连接的数据库名字之后直接OK即可。

如果是第一次连接 MySQL 的话,记得点击「download」下载 MySQL 驱动,之后点击「test connection」测试是否链接成功。

选择右侧的数据库表,双击,就可以查看到数据了。

在「console」SQL 查询面板里可以编写 SQL 语句来执行增删改查操作。

7.SpringBoot整合Druid

Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。

Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。

Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。

Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。

Spring Boot 2.0 以上默认使用 Hikari 数据源,可以说 Hikari 与 Driud 都是当前 Java Web 上最优秀的数据源,我们来重点介绍 Spring Boot 如何集成 Druid 数据源,如何实现数据库监控。

Github地址:github.com/alibaba/dr....

官网wiki:wiki

Druid 包含了三个重要的组成部分:

  • DruidDriver,能够提供基于 Filter-Chain 模式的插件体系;
  • DruidDataSource,高效可管理的数据库连接池;
  • SQLParser,支持所有 JDBC 兼容的数据库,包括 Oracle、MySQL 等。

Spring Boot默认的数据源是

  • 2.0之前org.apache.tomcat.jdbc.pool.DataSource
  • 2.0及之后 : com.zaxxer.hikari.HikariDataSource

在springboot中切换数据源非常简单**,只需要在配置文件中指定 spring.datasource.type为我们指定的类型就好了。**

eg:spring: datassource: type: com.alibaba.druid.pool.DruidDataSource

这样就完成切换我们的数据源为Druid。这个type的值是DataSource的接口的实现。

好了,话不多说,下面我们就开始整合Druid。

7.1 整合依赖

在 pom.xml 文件中添加 Druid 的依赖

java 复制代码
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.23</version>
</dependency>

7.2 添加配置

在 application.yml 文件中添加 Druid 配置。

yml 复制代码
spring:
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/leo-springboot-tutorial?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
      username: root
      password: root  #数据库名、用户名和密码改为自己的
      driver-class-name: com.mysql.cj.jdbc.Driver
      #数据源连接池配置
      initial-size: 5                                                                 #初始化连接大小
      min-idle: 5                                                                     #最小连接池数量
      max-active: 20                                                                  #最大连接池数量
      max-wait: 60000                                                                 #获取连接时最大等待时间,单位毫秒
      time-between-eviction-runs-millis: 60000                                        #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      min-evictable-idle-time-millis: 300000                                          #配置一个连接在池中最小生存的时间,单位是毫秒
      validation-query: SELECT 1 FROM DUAL                                            #测试连接
      test-while-idle: true                                                           #申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
      test-on-borrow: false                                                           #获取连接时执行检测,建议关闭,影响性能
      test-on-return: false                                                           #归还连接时执行检测,建议关闭,影响性能
      pool-prepared-statements: false                                                 #是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
      max-pool-prepared-statement-per-connection-size: 20                             #开启poolPreparedStatements后生效
      filters: stat,wall

      # StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
      stat-view-servlet:
        enabled: true                                                                 #是否开启内置监控页面,默认值为 false
        url-pattern: '/druid/*'                                                       #StatViewServlet 的映射路径,即内置监控页面的访问地址
        reset-enable: true                                                            #是否启用重置按钮
        login-username: admin                                                         #内置监控页面的登录页用户名 username
        login-password: 123456                                                         #内置监控页面的登录页密码 password

      # WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
      web-stat-filter:
        enabled: true                                                                 #是否开启内置监控中的 Web-jdbc 关联监控的数据
        url-pattern: '/*'                                                             #匹配路径
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'                     #排除路径
        session-stat-enable: true                                                     #是否监控session

      # Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
      aop-patterns: net.biancheng.www.*                                              #Spring监控AOP切入点,如x.y.z.abc.*,配置多个英文逗号分隔

      # 对配置已开启的 filters 即 stat(sql 监控)  wall(防火墙)
      filter:
        #配置StatFilter (SQL监控配置)
        stat:
          enabled: true                                                               #开启 SQL 监控
          slow-sql-millis: 1000                                                       #慢查询
          log-slow-sql: true                                                          #记录慢查询 SQL
        #配置WallFilter (防火墙配置)
        wall:
          enabled: true                                                               #开启防火墙
          config:
            update-allow: true                                                        #允许更新操作
            drop-table-allow: false                                                   #禁止删表操作
            insert-allow: true                                                       #允许插入操作
            delete-allow: true                                                        #删除数据操作

7.3 测试

重启项目。在日志信息里可以看到 Druid 的初始化信息。

可以看到我们的数据源就已经切换为Druid了。

7.4 最后效果

通过 http://localhost:8201/druid/ 地址就可以在浏览器访问 Druid 的监控页面了,用户名和密码是我们在配置文件里指定的 admin和 123456。

更多关于监控的配置信息,可以到 Druid 的 GitHub 仓库查看。

github.com/alibaba/dru...

8.源码仓库

springboot-mysql: github.com/gaoziman/Le...

以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。

如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
weixin_4624284710 分钟前
使用 Caffeine 缓存并在业务方法上通过注解实现每3到5秒更新缓存
java·缓存
程序媛小果12 分钟前
基于java+SpringBoot+Vue的桂林旅游景点导游平台设计与实现
java·vue.js·spring boot
骑鱼过海的猫12314 分钟前
【java】java通过s3访问ceph报错
java·ceph·iphone
杨充20 分钟前
13.观察者模式设计思想
java·redis·观察者模式
Lizhihao_22 分钟前
JAVA-队列
java·开发语言
喵叔哟31 分钟前
重构代码之移动字段
java·数据库·重构
喵叔哟31 分钟前
重构代码之取消临时字段
java·前端·重构
fa_lsyk34 分钟前
maven环境搭建
java·maven
Daniel 大东1 小时前
idea 解决缓存损坏问题
java·缓存·intellij-idea
wind瑞1 小时前
IntelliJ IDEA插件开发-代码补全插件入门开发
java·ide·intellij-idea