spring入门笔记(三)

本文介绍了Spring框架中的JdbcTemplate,一种对原始JdbcAPI的封装,并详细解释了如何通过Spring进行事务控制,包括PlatformTransactionManager接口的使用、事务的隔离级别及传播行为等。
摘要由CSDN通过智能技术生成

Spring 中的 JdbcTemplate
它是 spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。 spring 框架为我们提供了很多
的操作模板类。
除了默认构造函数之外,都需要提供一个数据源依赖注入即可

在 dao 中使用 JdbcTemplate注意事项
第一种在 Dao 类中定义 JdbcTemplate 的方式,适用于所有配置方式(xml 和注解都可以)。
第二种让 Dao 继承 JdbcDaoSupport 的方式,只能用于基于 XML 的方式,注解用不了。
Spring 中的事务控制API 介绍
PlatformTransactionManager此接口是 spring 的事务管理器

--TransactionStatus getTransaction(TransactionDefinition definition)获取事务状态

--void commit(TransactionStatus status)提交事务

--void rollback(TransactionStatus status)
真正管理事务的对象
org.springframework.jdbc.datasource.DataSourceTransactionManager 使用 Spring
JDBC 或 iBatis 进行持久化数据时使用
org.springframework.orm.hibernate5.HibernateTransactionManager 使用
Hibernate 版本进行持久化数据时使用

TransactionDefinition事务的定义信息对象
--String getName()获取事务对象名称

--int getIsolationLevel()获取事务隔离级别

--int getPropagationBehavior()获取事务传播行为

--int getTimeout() 获取事务超时时间

--boolean isReadOnly()是否只读事务

TransactionStatus
--void flusth()刷新事务

--Boolean hasSavepoint()是否存在存储点

--boolean isNewTransaction()事务是否是新的

--boolean isCompleted()事务是否完成

--boolean isRollbackOnly()是否回滚

事务的隔离级别反应事务提交并发访问时的处理态度

read uncommitted 

读未提交的数据

read committed

读已经提交的数据,解决脏读问题(Oracle 默认级别)

repeatable read

读取其它事务提交修改后的数据,解决不可重复读(Mysql默认级别 )

serializable

是否读取其它事务提交添加后的数据,解决幻影读问题

事务的传播行为
REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选择(默认值)
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)
MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常
REQUERS_NEW:新建事务,如果当前在事务中,把当前事务挂起。
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
NEVER:以非事务方式运行,如果当前存在事务,抛出异常
NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行 REQUIRED 类似的操作。
基于 XML 的声明式事务控制(配置方式)
第一步: 配置事务管理器

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource" ref="dataSource"></property>
 </bean>

第二步:配置事务的通知引用事务管理器

<tx:advice id="txAdvise" transaction-manager="transactionManager">

<!-- 配置service实现类中,每一个方法对事务的支持情况
                propagation:传播行为
                read-only:是否只读
                name : 方法名称
                    可以支持通配符的写法(*:代表任意字符串)
            -->

            <tx:attributes>
                <tx:method name="*" propagation="REQUIRED" read-only="false"/>
            </tx:attributes>

 </tx:advice>

第三步:配置 AOP 切入点表达式
 <!-- 定位需要添加事务的类和方法 -->
     <aop:config>
         <!-- 定义切入点 -->
         <aop:pointcut expression="execution(* cn.ithehe.service.impl.*.*(..))" id="pt"/>
         <!-- 定义事务通知 
             将切入点和事务通知联系起来
         -->
         <aop:advisor advice-ref="txAdvice" pointcut-ref="pt" />
     </aop:config>

基于注解的配置方式
第一步:配置事务管理器并注入数据源
第二步:在业务层使用@Transactional 注解
出现接口上,表示该接口的所有实现类都有事务支持。
出现在类上,表示类中所有方法有事务支持
出现在方法上,表示方法有事务支持。
以上三个位置的优先级:方法>类>接口
第三步:在配置文件中开启 spring 对注解事务的支持
<tx:annotation-driven transaction-manager="transactionManager"/>(默认)

第四步:开启对事务注解的支持@EnableTransactionManagement

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值