中高级程序员可能都不会使用spring-boot-starter-jdbc访问MySQL
ztj100 2025-04-02 00:35 24 浏览 0 评论
使用spring-boot-starter-jdbc访问MySQL
MySQL是目前项目中广泛运用的关系数据库,直接使用JDBC访问MySQL是经常使用的技术方式。MySQL所使用的SQL是访问数据库最常用的标准化语言。由于开源、体积小、速度快、总体拥有成本低等特点,一般后台企业应用开发都会选择MySQL作为数据库。
本节我们通过对JDBC与MySQL访问来了解Spring Data提供的访问数据库的不同解决方案。Spring Boot自动配置了数据访问的基础设施,我们需要直接或者间接地依赖Spring-JDBC组件包,一旦Spring-JDBC位于Spring Boot应用的classpath路径,就会触发数据访问相关的自动配置行为,最简单的做法就是把spring-boot-starter-jdbc添加为应用的依赖。
Spring提供了JdbcTemplate来对数据库访问技术JDBC进行封装,包括管理数据库连接、简单查询结果映射到Java对象、复杂结果集通过实现RowMapper接口映射到Java对象。默认情况下,如果没有配置数据源,Spring Boot会自动配置一个内嵌的数据库的DataSource。通常情况下,我们会自己配置数据源,Spring Boot提供自动配置能力,根据配置参数对DataSource进行自定义配置,下面是接入步骤。
1.引入Maven依赖
集成MySQL数据库之前,我们需要在项目的POM文件中添加MySQL所需的依赖,具体代码如下:
2.配置数据源
在Spring Boot中,只要配置好数据源DataSource,就能自动使用JdbcTemplate。下面是一个多数据源的配置——application.XML配置文件,代码如下:
3.自定义DataSource配置
注 意 : @Primary 注 解 的 作 用 是 保 证 项 目 中 只 有 一 个 主 的DataSourceProperties Bean。
4.连接池的选择
在Sping Boot 2.0之后默认使用Hikari数据库连接池,可以不再用Druid、c3p0等连接池了。Hikari的优势是其高效的性能和并发性,无须主动引入HikariCP的依赖。因为在Spring Boot 2.X中,spring-boot-starter-jdbc 默 认 引 入 HikariCP 依 赖 。 在application.yml中,添加HikariCP配置如下:
如果你的项目对监控要求高于性能需求,则可以使用Druid数据库连接池。Druid提供了强大的监控功能,Druid已经在阿里巴巴部署了超过600个应用,经历过一年多生产环境大规模部署的严苛考验。可以引 用 Druid 的 starter 依 赖 : druid-spring-boot-starter , 然 后 在application.yml中,添加Druid配置如下:
Druid的监控功能使用如下。
● 通过
spring.datasource.filter.stat配置StatFilter,实现统计监控信息。
● 通 过
spring.datasource.filter.stat-view-servlet 配 置StatViewServlet,提供监控信息的HTML页面和JSON API。
● 启动项目后,访问http://127.0.0.1:8080/druid地址,可以看到监控页面。
5.JdbcTemplate访问数据库
使用JdbcTemplate自带的CRUD功能,@Repository是Spring提供的注解,作用于类,同@Service、@Component注解功能类似。
JdbcTemplate主要提供以下5类方法。
● execute方法:用于执行任何SQL语句,一般用于执行DDL语句。
● update方法:用于执行新增、修改、删除等语句。
● batchUpdate方法:用于执行批处理相关语句。
● query方法及queryForXXX方法:用于执行查询相关语句。
● call方法:用于执行存储过程、函数相关语句。
6.事务的支持
Spring Boot中Maven依赖中添加了spring-boot-starter-jdbc依赖,就是可以实现对事务的支持,只需要在Dao业务层添加事务注解@Transactional即可。
注 意 : rollbackFor( 触 发 回 滚 异 常 ) , 默 认 是RuntimeException 和 Erro ( unchecked 异 常 ) 。 在 默 认 情 况 下 ,Spring框架只在抛出运行时和不可检查异常时才会对事务回滚。
● 如果你想让checked异常也回滚,注解方式如下:
● 如果你想让unchecked异常也不回滚,注解方式如下:
● 不需要事务管理的方法如下:
另外,如果你在业务方法中使用了try{}catch{},当出现数据异常时,事务就不回滚了,所以如果想要回滚异常事务,必须要主动将异常抛出来。
本文给大家讲解的内容是微服务数据架构,数据分类及存储特性,使用spring-boot-starter-jdbc访问MySQL
- 下篇文章给大家讲解的内容是微服务数据架构,数据分类及存储特性, SpringORM框架访问数据库
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!
相关推荐
- 如何将数据仓库迁移到阿里云 AnalyticDB for PostgreSQL
-
阿里云AnalyticDBforPostgreSQL(以下简称ADBPG,即原HybridDBforPostgreSQL)为基于PostgreSQL内核的MPP架构的实时数据仓库服务,可以...
- Python数据分析:探索性分析
-
写在前面如果你忘记了前面的文章,可以看看加深印象:Python数据处理...
- C++基础语法梳理:算法丨十大排序算法(二)
-
本期是C++基础语法分享的第十六节,今天给大家来梳理一下十大排序算法后五个!归并排序...
- C 语言的标准库有哪些
-
C语言的标准库并不是一个单一的实体,而是由一系列头文件(headerfiles)组成的集合。每个头文件声明了一组相关的函数、宏、类型和常量。程序员通过在代码中使用#include<...
- [深度学习] ncnn安装和调用基础教程
-
1介绍ncnn是腾讯开发的一个为手机端极致优化的高性能神经网络前向计算框架,无第三方依赖,跨平台,但是通常都需要protobuf和opencv。ncnn目前已在腾讯多款应用中使用,如QQ,Qzon...
- 用rust实现经典的冒泡排序和快速排序
-
1.假设待排序数组如下letmutarr=[5,3,8,4,2,7,1];...
- ncnn+PPYOLOv2首次结合!全网最详细代码解读来了
-
编辑:好困LRS【新智元导读】今天给大家安利一个宝藏仓库miemiedetection,该仓库集合了PPYOLO、PPYOLOv2、PPYOLOE三个算法pytorch实现三合一,其中的PPYOL...
- C++特性使用建议
-
1.引用参数使用引用替代指针且所有不变的引用参数必须加上const。在C语言中,如果函数需要修改变量的值,参数必须为指针,如...
- Qt4/5升级到Qt6吐血经验总结V202308
-
00:直观总结增加了很多轮子,同时原有模块拆分的也更细致,估计为了方便拓展个管理。把一些过度封装的东西移除了(比如同样的功能有多个函数),保证了只有一个函数执行该功能。把一些Qt5中兼容Qt4的方法废...
- 到底什么是C++11新特性,请看下文
-
C++11是一个比较大的更新,引入了很多新特性,以下是对这些特性的详细解释,帮助您快速理解C++11的内容1.自动类型推导(auto和decltype)...
- 掌握C++11这些特性,代码简洁性、安全性和性能轻松跃升!
-
C++11(又称C++0x)是C++编程语言的一次重大更新,引入了许多新特性,显著提升了代码简洁性、安全性和性能。以下是主要特性的分类介绍及示例:一、核心语言特性1.自动类型推导(auto)编译器自...
- 经典算法——凸包算法
-
凸包算法(ConvexHull)一、概念与问题描述凸包是指在平面上给定一组点,找到包含这些点的最小面积或最小周长的凸多边形。这个多边形没有任何内凹部分,即从一个多边形内的任意一点画一条线到多边形边界...
- 一起学习c++11——c++11中的新增的容器
-
c++11新增的容器1:array当时的初衷是希望提供一个在栈上分配的,定长数组,而且可以使用stl中的模板算法。array的用法如下:#include<string>#includ...
- C++ 编程中的一些最佳实践
-
1.遵循代码简洁原则尽量避免冗余代码,通过模块化设计、清晰的命名和良好的结构,让代码更易于阅读和维护...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- node卸载 (33)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- exceptionininitializererror (33)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)