Spring的JDBC模板
- Spring是EE开发一站式的框架,有EE开发的每层的解决方案:Spring对持久层也提供了解决方案:ORM模块和JDBC模板
package com.spring.aop.demo1;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
/*
* JDBC模板使用
*/
public class JDBC {
@Test
//jdbc模板的使用类似于DBUtils
public void demo1() {
//创建连接池
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///php?useSSL=false");
dataSource.setUsername("用户名");
dataSource.setPassword("密码");
//创建jdbc模板
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update("insert into stus values(null,?,?)","user","571390587");
}
}
将连接池和模板都交给Spring管理
- 引入Spring的配置文件
- 配置Spring的JDBC模板
<!-- 配置Spring的内置连接池 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
>
<!-- 属性注入============= -->
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///php?useSSL=false"/>
<property name="username" value="用户名"/>
<property name="password" value="密码"/>
</bean>
<!-- 配置Spring的JDBC模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
<property name="dataSource" ref="dataSource" />
</bean>
- 使用JDBC模板(需要引入AOP的jar包)
package com.spring.aop.demo1;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/*
* JDBC模板使用
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class JDBC {
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;
@Test
public void demo1() {
jdbcTemplate.update("insert into stus values(null,?,?)","小宝","8940372");
}
}
配置DBCP连接池
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<!-- 属性注入============= -->
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///php?useSSL=false"/>
<property name="username" value="用户名"/>
<property name="password" value="密码"/>
</bean>
<!-- 配置Spring的JDBC模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
<property name="dataSource" ref="dataSource" />
</bean>
配置C3P0连接池
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDtaSource" >
<!-- 属性注入============= -->
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///php?useSSL=false"/>
<property name="user" value="用户名"/>
<property name="password" value="密码"/>
</bean>
<!-- 配置Spring的JDBC模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
<property name="dataSource" ref="dataSource" />
</bean>
Spring的事务管理的API
PlaformTransactionManager:平台事务管理器
- 平台事务管理器:接口,是Spring用于管理事务的真正对象
- DataSourceTransactionManager:底层使用JDBC管理事务
- HibernateTransactionManager:底层使用Hibernate管理事务
TransactionDefinition:事务定义信息
- 事务定义:用于定义事务的相关信息,隔离级别、超时信息、传播行为、是否只读
TransactionStatus:事务的状态
- 事务状态:用于记录在事务管理过程中,事务的状态的对象
事务管理的API的关系
- Spring进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理,在事务管理过程中,
产生各种状态,将这些状态的信息记录到事务状态的对象中
Spring的事务的传播行为
- Spring中提供了七种事务的传播行为:
- 保证多个操作在同一个事务中
- PROPAGATION_REQUIRED :默认值,如果A中有事务,使用A中的事务,如果没有,会创建新的事务,将操作包含进来
- PROPAGATION_SUPPORTS :支持事务:如果A中有事务,使用A中的事务,如果没有,不使用
- PROPAGATION_MANDATORY :如果A中有事务,使用A中的事务,如果没有,抛出异常
- 保证多个操作不在同一个事务中
- PROPAGATION_REQUIRES_NEW :如果A中有事务,将A事务挂起(暂停),创建新的事务,只包含自身的操作。如果A中没有事务,创建一个新事务,包含自身操作
- PROPAGATION_NOT_SUPPORTED :如果A中有事务,将A事务挂起,不使用事务管理
- PROPAGATION_NEVER :如果A中有事务,抛出异常
- 嵌套式事务
- PROPAGATION_NESTED :嵌套事务,如果A中有事务,按照A的事务执行,执行完后,设置一个保存点,执行B中的操作,如果没有异常,执行通过,如果有异常,可以选择回滚到最初始的位置,也可以回滚到保存点
- 保证多个操作在同一个事务中
Spring的事务管理:声明式事务管理(通过配置实现)–AOP
- XML方式的声明式事务管理
- 注解方式的声明式事务管理