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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
15小时前
|
JavaScript Java 关系型数据库
公寓报修|公寓报修管理系统|基于springboot公寓报修管理系统设计与实现(源码+数据库+文档)
公寓报修|公寓报修管理系统|基于springboot公寓报修管理系统设计与实现(源码+数据库+文档)
9 2
|
15小时前
|
JavaScript Java 关系型数据库
旅游|基于Springboot的旅游管理系统设计与实现(源码+数据库+文档)
旅游|基于Springboot的旅游管理系统设计与实现(源码+数据库+文档)
6 0
|
15小时前
|
JavaScript 小程序 Java
求职|基于Springboot的校园求职招聘系统设计与实现(源码+数据库+文档)
求职|基于Springboot的校园求职招聘系统设计与实现(源码+数据库+文档)
6 0
|
15小时前
|
存储 JavaScript Java
物流|基于Springboot的物流管理系统设计与实现(源码+数据库+文档)
物流|基于Springboot的物流管理系统设计与实现(源码+数据库+文档)
7 0
|
15小时前
|
JavaScript Java 关系型数据库
博客|基于Springboot的个人博客系统设计与实现(源码+数据库+文档)
博客|基于Springboot的个人博客系统设计与实现(源码+数据库+文档)
6 0
|
15小时前
|
JavaScript Java 关系型数据库
流浪动物救助|基于Springboot的流浪动物救助平台设计与实现(源码+数据库+文档)
流浪动物救助|基于Springboot的流浪动物救助平台设计与实现(源码+数据库+文档)
5 0
|
15小时前
|
JavaScript Java 数据库
考勤|基于Springboot的大学生考勤系统设计与实现(源码+数据库+文档)
考勤|基于Springboot的大学生考勤系统设计与实现(源码+数据库+文档)
7 0
|
15小时前
|
JavaScript Java 关系型数据库
摄影分享|基于Springboot的摄影分享网站设计与实现(源码+数据库+文档)
摄影分享|基于Springboot的摄影分享网站设计与实现(源码+数据库+文档)
7 0
|
6天前
|
前端开发 关系型数据库 MySQL
SpringBoot-----从前端更新数据到MySql数据库
SpringBoot-----从前端更新数据到MySql数据库
14 1
|
6天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
38 0