Spring(JDBC、事务)

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方式的声明式事务管理
  • 注解方式的声明式事务管理

猜你喜欢

转载自blog.csdn.net/Woo_home/article/details/89789143
今日推荐