通过 Spring 框架如何进行JDBC操作呢?
来源:SegmentFault
时间:2023-01-25 21:49:43 486浏览 收藏
哈喽!今天心血来潮给大家带来了《通过 Spring 框架如何进行JDBC操作呢?》,想必大家应该对数据库都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到MySQL、算法、Java、Linux、程序员,若是你正在学习数据库,千万别错过这篇文章~希望能帮助到你!
通过 Spring 框架如何进行JDBC操作呢?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nUiCZnSc-1600675300070)(https://imgkr.cn-bj.ufileos.c...]
Spring 整合 JDBC 的方式
- 添加依赖
- 编写配置文件 db.properties
- bean.xml 配置修改
- 配置数据源
- 模板类配置
- 测试整合结果
案例实操
添加依赖
数据库驱动 jar 包
mysql-connector-java-5.1.25-bin.jar
数据库连接池相关 jar 包
c3p0-0.9.5.2.jar、mchange-commons-java-0.2.11.jar
Spring jdbc 相关 jar
spring-jdbc-4.3.2.RELEASE.jar、spring-tx-4.3.2.RELEASE.jar
<!-- spring 框架坐标依赖添加 --> <dependency><groupid>org.springframework</groupid><artifactid>spring-context</artifactid><version>4.3.2.RELEASE</version></dependency><!-- aop --><dependency><groupid>org.aspectj</groupid><artifactid>aspectjweaver</artifactid><version>1.8.9</version></dependency><!-- mysql 驱动包 --><dependency><groupid>mysql</groupid><artifactid>mysql-connector-java</artifactid><version>5.1.39</version></dependency><!-- c3p0 连接池 --><dependency><groupid>c3p0</groupid><artifactid>c3p0</artifactid><version>0.9.1.2</version></dependency><!-- spring jdbc --><dependency><groupid>org.springframework</groupid><artifactid>spring-jdbc</artifactid><version>4.3.2.RELEASE</version></dependency><!-- springs事务 --><dependency><groupid>org.springframework</groupid><artifactid>spring-tx</artifactid><version>4.3.2.RELEASE</version></dependency>
配置文件db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring_jdbc?useUnicode=true&characterEncod ing=utf8 jdbc.user=root jdbc.password=root mysql8版本以上 jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/user?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true jdbc.user=root jdbc.password=root
以下为可选配置
initialPoolSize=20 maxPoolSize=100 minPoolSize=10 maxIdleTime=600 acquireIncrement=5 maxStatements=5 idleConnectionTestPeriod=60
bean.xml 配置修改
加载 properties 文件配置
<!-- 加载 properties 配置文件 --> <property-placeholder location="db.properties"></property-placeholder>
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"><!-- 加载properties 配置文件 --><property-placeholder location="db.properties"></property-placeholder><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driver}"></property><property name="jdbcUrl" value="${jdbc.url}"></property><property name="user" value="${jdbc.user}"></property><property name="password" value="${jdbc.password}"></property></bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean></beans>
配置数据源
由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先 同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连 接池中申请一个就行,用完后再放回去。
C3P0 与 dbcp 二选一即可
DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用 dbcp 需要 2 个包:commons-dbcp.jar,commons-pool.jar dbcp,没有自动回收空闲连接的功能.
C3P0 是一个开源的 JDBC 连接池,它实现了数据源,支持 JDBC3 规范和 JDBC2 的标准扩展。目前使用它的开源项目有 Hibernate,Spring 等。c3p0 有自动回收空闲连接功能
C3P0 数据源配置
<!-- 配置 c3p0 数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${driver}"></property><property name="jdbcUrl" value="${url}"></property><property name="user" value="${user}"></property><property name="password" value="${password}"></property></bean>
C3P0 其他额外配置(对应的值在 db.properties 文件中指定)
<!-- 指定连接池中保留的最大连接数. Default:15--> <property name="maxPoolSize" value="${maxPoolSize}"></property><!-- 指定连接池中保留的最小连接数--><property name="minPoolSize" value="${minPoolSize}"></property><!-- 指定连接池的初始化连接数 取值应在 minPoolSize 与 maxPoolSize 之 间.Default:3--><property name="initialPoolSize" value="${initialPoolSize}"></property><!-- 最大空闲时间,60 秒内未使用则连接被丢弃。若为 0 则永不丢弃。 Default:0--><property name="maxIdleTime" value="${maxIdleTime}"></property><!-- 当连接池中的连接耗尽的时候 c3p0 一次同时获取的连接数. Default:3--><property name="acquireIncrement" value="${acquireIncrement}"></property><!-- JDBC 的标准,用以控制数据源内加载的 PreparedStatements 数量。 但由于预缓存的statements属于单个connection而不是整个连接池所以设置这个参数需要 考虑到多方面的因数.如果 maxStatements 与 maxStatementsPerConnection 均为 0,则缓存 被关闭。Default:0--><property name="maxStatements" value="${maxStatements}"></property><!-- 每 60 秒检查所有连接池中的空闲连接.Default:0 --><property name="idleConnectionTestPeriod" value="${idleConnectionTestPeriod}"></property>
对于 dbcp 数据源配置如下:
<!-- 配置 dbcp 数据源--> <bean id="myDataSource" class="org.apache.commons.dbcp2.BasicDataSource"><property name="driverClassName" value="${driver}"></property><property name="url" value="${url}"></property><property name="username" value="${user}"></property><property name="password" value="${password}"></property><!-- 连接池启动时的初始值 --><property name="initialSize" value="1"></property><!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到 maxIdle 为止 --><property name="maxIdle" value="2"></property><!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请一些连接,以避免洪峰来时再申请而造成的性能开销 --><property name="minIdle" value="1"></property></bean>
模板类配置
Spring 把 JDBC 中重复的操作建立成了一个模板类:org.springframework.jdbc.core.JdbcTemplate ,配置文件中加入
<!-- jdbcTemplate 配置 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean>
测试整合结果
通过 junit 测试 jdbcTemplate bean 是否获取到
public class TestSpringJdbc { private JdbcTemplate jdbcTemplate; @Before public void init(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml"); jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate"); } @Test public void test() { String sql="select count(1) from account"; Integer total= jdbcTemplate.queryForObject(sql, Integer.class); System.out.println("总计路数:"+total); } }
扩展
JDBC 事务
如果应用程序中直接使用 JDBC 来进行持久化,此时使用 DataSourceTransactionManager 来处理事务边界。为了使用 DataSourceTransactionManager,需要使用如下的 XML 将其装配到应用程序的上下文定义中:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean>
界。为了使用 DataSourceTransactionManager,需要使用如下的 XML 将其装配到应用程序的上下文定义中:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean>
实际上,DataSourceTransactionManager 是通过调用 java.sql.Connection 来管理事务, 而后者是通过 DataSource 获取到的。通过调用连接的 commit()方法来提交事务,同样,事务失败则通过调用 rollback()方法进行回滚。
以上就是《通过 Spring 框架如何进行JDBC操作呢?》的详细内容,更多关于mysql的资料请关注golang学习网公众号!
-
499 收藏
-
398 收藏
-
244 收藏
-
235 收藏
-
327 收藏
-
278 收藏
-
126 收藏
-
414 收藏
-
320 收藏
-
247 收藏
-
149 收藏
-
392 收藏
-
268 收藏
-
162 收藏
-
349 收藏
-
363 收藏
-
345 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 514次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 499次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习