spring(4)

JdbcTemplate

1JdbcTemplate是spring提供的操作对象,是对Jdbc API的简单封装
JdbcTemplate的使用
1 导入相关的jar包
2 在配置文件中配置数据源
3 在配置文件中将数据源注入到JdbcTemplate中
4 在操作类中获取JdbcTemplate。
	JdbcTemplate.execute()
	JdbcTemplate.update()
	JdbcTemplate.query()
	Jdbc.queryForObject()
存在的问题

我们的dao 有很多时,每个dao 都有一些重复性的代码。下面就是重复代码:

private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

解决的方法(这种方式只适用于XML配置的情况,如果是注解配置还是得使用上一种方式)
让dao 继承JdbcDaoSupport
当然也需要给这个dao类注入一个数据源

getJdbcTemplate().query();

Spring 中的事务控制

第一:JavaEE 体系进行分层开发,事务处理位于业务层,Spring 提供了分层设计业务层的事务处理解决方案。
第二:spring 框架为我们提供了一组事务控制的接口。具体在后面的第二小节介绍。这组接口是在spring-tx-5.0.2.RELEASE.jar 中。
第三:spring 的事务控制都是基于AOP 的,它既可以使用编程的方式实现,也可以使用配置的方式实现。我们学习的重点是使用配置的方式实现。

PlatformTransactionManager此接口是spring 的事务管理器。
包含三个具体操作:
获取事物状态信息:getTransaction()
提交:commit()
回滚:rollback()

主要是使用它的两个实现类:
DataSourceTransactionManager(JdcTemplate和mybatis用)
HibernateTransactionManager (Hibernate 用)

TransactionDefinition:
隔离级别
传播行为:REQUIRED(有就用,没有就建),SUPPORTS(有就用,没有就非事物运行)
是否只读
超时时间

TransactionStatus:
刷新事物
是否存在存储点
事物是否完成
事物是否为新事物
是否回滚

基于XML的声明式配置
1 配置事物管理器(DataSourceTransactionManager),并给注入数据源
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入DataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
2 配置事物的通知引用事物管理器
<!-- 事务的配置-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
</tx:advice>
3 配置事物的属性
<!--在tx:advice 标签内部配置事务的属性-->
<tx:attributes>
<!-- 指定方法名称:是业务核心方法
read-only:是否是只读事务。默认false,不只读。
isolation:指定事务的隔离级别。默认值是使用数据库的默认隔离级别。
propagation:指定事务的传播行为。
timeout:指定超时时间。默认值为:-1。永不超时。
rollback-for:用于指定一个异常,当执行产生该异常时,事务回滚。产生其他异常,事务不回滚。
没有默认值,任何异常都回滚。
no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时,事务回
滚。没有默认值,任何异常都回滚。
-->
<tx:method name="*" read-only="false" propagation="REQUIRED"/>
<tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
</tx:attributes>
4  配置AOP切入点表达式
<!-- 配置aop -->
<aop:config>
<!-- 配置切入点表达式-->
<aop:pointcut expression="execution(* com.itheima.service.impl.*.*(..))"
id="pt1"/>
</aop:config>
5 配置切入点表达式和事务通知的对应关系
<!-- 在aop:config 标签内部:建立事务的通知和切入点表达式的关系-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/>
基于注解的配置方式
1 配置事务管理器并注入数据源
2 在业务层使用@Transactional 注解
@Transactional(readOnly=true,propagation=Propagation.SUPPORTS)
该注解的属性和xml 中的属性含义一致。该注解可以出现在接口上,类上和方法上。
出现接口上,表示该接口的所有实现类都有事务支持。
出现在类上,表示类中所有方法有事务支持
出现在方法上,表示方法有事务支持。
以上三个位置的优先级:方法>>接口
3 在配置文件中开启spring 对注解事务的支持
<!-- 开启spring 对注解事务的支持-->
<tx:annotation-driven transaction-manager="transactionManager"/>
完全使用注解的方式:
在@Configuration标记的注解类上使用@EnableTransactionManagement注解
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值