Spring Boot 数据库操作Druid和HikariDataSource(一)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Spring Boot 数据库操作Druid和HikariDataSource

Spring Boot  数据库操作

JDBC+HikariDataSource

应用实例-需求

● 需求:演示Spring Boot 如何通过jdbc+HikariDataSource 完成对Mysql 操作

说明: HikariDataSource : 目前市面上非常优秀的数据源, 是springboot2 默认数据源

创建测试数据库和表

1. -- 创建furns_ssm
2. DROP DATABASE IF EXISTS spring_boot;
3. CREATE DATABASE spring_boot;
4. USE spring_boot;
5. -- 创建家居表
6. CREATE TABLE furn(
7. `id` INT(11) PRIMARY KEY AUTO_INCREMENT, ## id
8. `name` VARCHAR(64) NOT NULL, ## 家居名
9. `maker` VARCHAR(64) NOT NULL, ## 厂商
10. `price` DECIMAL(11,2) NOT NULL, ## 价格
11. `sales` INT(11) NOT NULL, ## 销量
12. `stock` INT(11) NOT NULL, ## 库存
13. `img_path` VARCHAR(256) NOT NULL ## 照片路径
14. );
15. -- 初始化家居数据
16. INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
17. VALUES(NULL , ' 北欧风格小桌子' , ' 熊猫家居' , 180 , 666 , 7 ,
18. 'assets/images/product-image/1.jpg');
19. INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
20. VALUES(NULL , ' 简约风格小椅子' , ' 熊猫家居' , 180 , 666 , 7 ,
21. 'assets/images/product-image/2.jpg');
22. INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
23. VALUES(NULL , ' 典雅风格小台灯' , ' 蚂蚁家居' , 180 , 666 , 7 ,
24. 'assets/images/product-image/3.jpg');
25. INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
26. VALUES(NULL , ' 温馨风格盆景架' , ' 蚂蚁家居' , 180 , 666 , 7 ,
27. 'assets/images/product-image/4.jpg');
28. SELECT * FROM furn;

进行数据库开发, 在pom.xml 引入data-jdbc starter

参考官方文档

https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-syst

ems.starters .

1. <!--进行数据库开发,引入data-jdbc starter-->
2. <dependency>
3. <groupId>org.springframework.boot</groupId>
4. <artifactId>spring-boot-starter-data-jdbc</artifactId>
5. </dependency>

 

需要在pom.xml 指定导入数据库驱动

因为Spring Boot 不知道项目要操作Mysql 还是Oracle , 需要在pom.xml 指定导入数据库驱动, 并指定对应版本.

1. <!--引入mysql的驱动
2.         1. 说明这里没有使用版本仲裁  <mysql.version>8.0.26</mysql.version>
3.         2. 指定的版本是5.1.49
4.         -->
5. <dependency>
6. <groupId>mysql</groupId>
7. <artifactId>mysql-connector-java</artifactId>
8. <version>5.1.49</version>
9. </dependency>

在application.yml 配置操作数据源的信息

1. spring:
2. servlet:
3. multipart:
4.       max-file-size: 10MB
5.       max-request-size: 50MB
6. datasource: #配置数据源
7. # 说明: 如果你没有指定useSSL=true ,启动项目会报红警告, 环境的问题,要灵活处理
8. url: jdbc:mysql://localhost:3306/spring_boot?useSSL=true&useUnicode=true&characterEncoding=UTF-8
9. username: root
10. password: 自己的密码
11.     driver-class-name: com.mysql.jdbc.Driver

创建bean\Furn.java

1. public class Furn {
2. private Integer id;
3. 
4. private String name;
5. 
6. private String maker;
7. 
8. private BigDecimal price;
9. 
10. private Integer sales;
11. 
12. private Integer stock;
13. 
14. private String imgPath = "assets/images/product-image/1.jpg";
15. 
16. public Furn(Integer id, String name, String maker, BigDecimal price, Integer sales, Integer stock, String imgPath) {
17. this.id = id;
18. this.name = name;
19. this.maker = maker;
20. this.price = price;
21. this.sales = sales;
22. this.stock = stock;
23. this.imgPath = imgPath;
24.     }
25. 
26. public Furn() {
27.     }
28. 
29. public Integer getId() {
30. return id;
31.     }
32. 
33. public void setId(Integer id) {
34. this.id = id;
35.     }
36. 
37. public String getName() {
38. return name;
39.     }
40. 
41. public void setName(String name) {
42. this.name = name;
43.     }
44. 
45. public String getMaker() {
46. return maker;
47.     }
48. 
49. public void setMaker(String maker) {
50. this.maker = maker;
51.     }
52. 
53. public BigDecimal getPrice() {
54. return price;
55.     }
56. 
57. public void setPrice(BigDecimal price) {
58. this.price = price;
59.     }
60. 
61. public Integer getSales() {
62. return sales;
63.     }
64. 
65. public void setSales(Integer sales) {
66. this.sales = sales;
67.     }
68. 
69. public Integer getStock() {
70. return stock;
71.     }
72. 
73. public void setStock(Integer stock) {
74. this.stock = stock;
75.     }
76. 
77. public String getImgPath() {
78. return imgPath;
79.     }
80. 
81. public void setImgPath(String imgPath) {
82. this.imgPath = imgPath;
83.     }
84. 
85. @Override
86. public String toString() {
87. return "Furn{" +
88. "id=" + id +
89. ", name='" + name + '\'' +
90. ", maker='" + maker + '\'' +
91. ", price=" + price +
92. ", sales=" + sales +
93. ", stock=" + stock +
94. ", imgPath='" + imgPath + '\'' +
95. '}';
96.     }
97. }

测试结果

test 目录下的usersys/ApplicationTests.java , 完成测试

如果不知道JdbcTemplate请看一下spring的博客文章

使用BeanPropertyRowMapper时,是给query()方法传递一个BeanPropertyRowMapper对象让JdbcTemplate帮我们把执行sql语句的结果集自动帮我们封装到对应的属性

1. @SpringBootTest
2. public class ApplicationTests {
3. 
4. //如果不知道JdbcTemplate请看一下spring的博客文章
5. @Resource
6. private JdbcTemplate jdbcTemplate;
7. 
8. @Test
9. public void contextLoads() {
10. 
11.         BeanPropertyRowMapper<Furn> rowMapper =
12. new BeanPropertyRowMapper<>(Furn.class);
13. 
14.         List<Furn> furns = jdbcTemplate.query("SELECT * FROM `furn`", rowMapper);
15. for (Furn furn : furns) {
16.             System.out.println(furn);
17.         }
18. 
19.         System.out.println(jdbcTemplate.getDataSource().getClass());
20.     }
21. }

整合Druid 到Spring-Boot

官方文档

使用手册: https://github.com/alibaba/druid 

中文手册: https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

基本介绍

1. HiKariCP: 目前市面上非常优秀的数据源, 是springboot2 默认数据源

2. Druid: 性能优秀,Druid 提供性能卓越的连接池功能外 这个在专题javaEE的数据库和jdbc的这篇博客中有说明 链接

,还集成了SQL 监控,黑名单拦截等功能,强大的监控特性,通过Druid 提供的监控功能,可以清楚知道连接池和SQL 的工作情况,所以根据项目需要,我们也要掌握Druid 和SpringBoot 整合

3. 整合Druid 到Spring-Boot 方式

       ● 自定义方式

       ● 引入starter 方式

Durid 基本使用

需求: 将Spring-Boot 的数据源切换成Druid

修改pom.xml , 引入druid 依赖

1. <!--引入druid starter-->
2. <dependency>
3. <groupId>com.alibaba</groupId>
4. <artifactId>druid-spring-boot-starter</artifactId>
5. <version>1.1.17</version>
6. </dependency>

创建DruidDataSourceConfig.java 配置类

1. @Configuration
2. public class DruidDataSourceConfig {
3. 
4. //编写方法,注入DruidDataSource
5. //还有说明一下为什么我们注入自己的DataSource , 默认的HiKariDatasource失效?
6. //1. 默认的数据源是如配置? @ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
7. //  解读通过@ConditionalOnMissingBean({ DataSource.class}) 判断如果容器有DataSource Bean 就不注入默认的HiKariDatasource
8. @ConfigurationProperties("spring.datasource")
9. @Bean
10. public DataSource dataSource() throws SQLException {
11. //1. 配置了 @ConfigurationProperties("spring.datasource")
12. //   就可以读取到application.yml的配置
13. //2. 我们就不需要调用DruidDataSource 对象的setXxx, 会自动关联
14. 
15. DruidDataSource druidDataSource = new DruidDataSource();
16. return druidDataSource;
17.     }
18. }

完成测试,运行ApplicationTests.java , 观察数据源的运行类型

Durid 监控功能-SQL 监控

需求: 配置Druid 的监控功能,包括SQL 监控、SQL 防火墙、Web 应用、Session 监控等

修改DruidDataSourceConfig.java , 增加druid 监控功能

地址:

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE 

1. //配置druid的监控页功能
2. @Bean
3. public ServletRegistrationBean statViewServlet() {
4. //创建StatViewServlet
5. StatViewServlet statViewServlet = new StatViewServlet();
6.         ServletRegistrationBean<StatViewServlet> registrationBean =
7. new ServletRegistrationBean<>(statViewServlet, "/druid/*");
8. //设置init-parameter, 设置用户名和密码
9.         registrationBean.addInitParameter("loginUsername", "wyx");
10.         registrationBean.addInitParameter("loginPassword", "666666");
11. 
12. return registrationBean;
13.     }

完成测试

访问http://localhost:10000/druid/index.html 不会被拦截, 如果没有问题,会看到这个页面

修改DruidDataSourceConfig.java , 加入监控功能

参考: https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

创建DruidSqlController.java

1. @Controller
2. public class DruidSqlController {
3. 
4. @Resource
5. private JdbcTemplate jdbcTemplate;
6. 
7. @ResponseBody
8. @GetMapping("/sql")
9. public List<Furn> crudDB() {
10. 
11.         BeanPropertyRowMapper<Furn> rowMapper = new BeanPropertyRowMapper<>(Furn.class);
12.         List<Furn> furns = jdbcTemplate.query("select * from `furn`", rowMapper);
13. for (Furn furn : furns) {
14.             System.out.println(furn);
15.         }
16. return furns;
17.     }
18. }

SQL 监控数据-测试页面

● 完成测试, 观察SQL 监控数据, 浏览器http://localhost:10000/druid/sql.html


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
12 2
SpringBoot入门(4) - 添加内存数据库H2
|
8天前
|
druid Java Maven
|
4天前
|
SQL Java 数据库
Spring Boot与Flyway:数据库版本控制的自动化实践
【10月更文挑战第19天】 在软件开发中,数据库的版本控制是一个至关重要的环节,它确保了数据库结构的一致性和项目的顺利迭代。Spring Boot结合Flyway提供了一种自动化的数据库版本控制解决方案,极大地简化了数据库迁移管理。本文将详细介绍如何使用Spring Boot和Flyway实现数据库版本的自动化控制。
8 2
|
15天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
25 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
15天前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
15 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
21天前
|
Java 数据库 数据安全/隐私保护
Spring 微服务提示:使用环境变量抽象数据库主机名
Spring 微服务提示:使用环境变量抽象数据库主机名
33 1
|
21天前
|
SQL Java 数据库连接
springBoot+Jpa(hibernate)数据库基本操作
springBoot+Jpa(hibernate)数据库基本操作
25 0
|
16天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
67 6
|
13天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
49 3
Mysql(4)—数据库索引
|
16天前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
52 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用