知识分享:通过 Spring 框架如何进行JDBC操作呢?

码农天地 -
知识分享:通过 Spring 框架如何进行JDBC操作呢?
Spring 整合 JDBC 的方式添加依赖编写配置文件 db.propertiesbean.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 配置文件 -->
<context:property-placeholder location="db.properties" />

<?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.or...
http://www.springframework.or...
http://www.springframework.or...
http://www.springframework.or...
http://www.springframework.or...
http://www.springframework.or...
http://www.springframework.or...d">
<!-- 加载properties 配置文件 -->
<context:property-placeholder location="db.properties" />
<bean id="dataSource" >
<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" >
<property name=dataSource ref="dataSource"/>
</bean>
</beans>

配置数据源

由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先 同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连 接池中申请一个就行,用完后再放回去。

C3P0dbcp二选一即可

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" >
<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 name=minPoolSize value="${minPoolSize}"/>
<!-- 指定连接池的初始化连接数 取值应在 minPoolSize 与 maxPoolSize 之 间.Default:3-->
<property name=initialPoolSize value="${initialPoolSize}"/>
<!-- 最大空闲时间,60 秒内未使用则连接被丢弃。若为 0 则永不丢弃。 Default:0-->
<property name=maxIdleTime value="${maxIdleTime}"/>
<!-- 当连接池中的连接耗尽的时候 c3p0 一次同时获取的连接数. Default:3-->
<property name=acquireIncrement value="${acquireIncrement}"/>
<!-- JDBC 的标准,用以控制数据源内加载的 PreparedStatements 数量。
但由于预缓存的statements属于单个connection而不是整个连接池所以设置这个参数需要
考虑到多方面的因数.如果 maxStatements 与 maxStatementsPerConnection 均为 0,则缓存
被关闭。Default:0-->
<property name=maxStatements value="${maxStatements}"/>
<!-- 每 60 秒检查所有连接池中的空闲连接.Default:0 -->
<property name=idleConnectionTestPeriod value="${idleConnectionTestPeriod}"/>

对于 dbcp 数据源配置如下:

<!-- 配置 dbcp 数据源-->
<bean id="myDataSource" >
<property name=driverClassName value="${driver}" />
<property name=url value="${url}"/>
<property name=username value="${user}"/>
<property name=password value="${password}"/>
<!-- 连接池启动时的初始值 -->
<property name=initialSize value="1"/>
<!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到 maxIdle 为止 -->
<property name=maxIdle value="2"/>
<!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请一些连接,以避免洪峰来时再申请而造成的性能开销 -->
<property name=minIdle value="1"/>
</bean>

模板类配置

Spring 把 JDBC 中重复的操作建立成了一个模板类:org.springframework.jdbc.core.JdbcTemplate ,配置文件中加入

<!-- jdbcTemplate 配置 -->
<bean id="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"
>
<property name=dataSource ref="dataSource" />
</bean>

实际上,DataSourceTransactionManager 是通过调用 java.sql.Connection 来管理事务, 而后者是通过 DataSource 获取到的。通过调用连接的 commit()方法来提交事务,同样,事务失败则通过调用 rollback()方法进行回滚。

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

php介绍

PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。

Tags 标签

javaspring后端phpspringboot

扩展阅读

加个好友,技术交流

1628738909466805.jpg