Spring3——JdbcTemplate
JdbcTemplate
- 概述 : Spring框架提供一个对象,对原始的Jdbc API对象的简单封装,spring框架为我们提供了很多的操作模板
- 开发步骤 :
- 导入spring-jdbc和spring-tx坐标
- 创建数据库表和实体
- 创建JdbcTemplate对象
- 执行数据库操作
- 更新操作 : jdbcTemplate.update (sql,params)
- 查询操作 :
- jdbcTemplate.query(sql,Mapper,params)
- jdbcTemplate.queryForobject(sql,Mapper,params)
事务控制
1.编程式事务控制
-
事务的传播行为 :解决业务方法调用其它业务方法时,它们之间事务一致性的问题
-
编程式事务控制三大对象:
- PlatformTransactionManager
- TransactionDefinition
- TransactionStatus
2.基于XML的声明式事务控制
Spring声明式事务控制底层就是AOP
-
Spring的声明式事务控制就是采用声明的方式来处理事务,这里所说的声明,就是指在配置文件中声明,
用在Spring配置文件中声明式的处理事务来代替代码式的处理事务。 -
Spring的声明式事务处理的作用 :
- 事务管理不侵入开发的组件。具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划,也只需要在定义文件中重新配置即可
- 在不需要事务管理的时候,只要在设定文件上修改一下,即可移去事务管理服务,无需改变代码重新编译,这样维护起来极其方便
-
事务参数的配置
<!-- 目标对象 内部的方法是切点-->
<bean id="accountService" class="tx.service.impl.AccountServiceImpl">
<property name="accountDao" ref="accountDao2"></property>
</bean>
<!--配置平台事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSourse"/>
</bean>
<!--通知 事务的增强-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--设置事务的属性信息-->
<tx:attributes>
<tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!--配置事务的aop织入-->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* tx.service.impl.*.*(..))"/>
</aop:config>
3.基于注解的声明式事务控制
- 使用@Transactional 在需要进行事务控制的类或是方法上修饰,注解可用的属性同xml配置方式
@Transactional(isolation = Isolation.REPEATABLE_READ,propagation = Propagation.REQUIRED)
隔离级别 : Isolation ; 传播行为 : propagation - 注解使用在类上,那么该类下的所有方法都使用同一套注解参数配置。
- 使用在方法上,不同的方法可以采用不同的事务参数配置。
使用的 AccountServiceImpl 类
@Service("accountService")
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountDao accountDao;
@Transactional(isolation = Isolation.REPEATABLE_READ,propagation = Propagation.REQUIRED)
public void transfer(String outMan, String inMan, double money) {
//开启事务
accountDao.out(outMan,money);
// int i = 1/0;
accountDao.in(inMan,money);
//提交事务
}
}
applicationContext.xml的配置
<!--配置平台事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSourse"/>
</bean>
<!-- 事务的注解驱动-->
<tx:annotation-driven transaction-manager="transactionManager"/>