Spring持久层

spring为什么要与持久层技术整合

1、需要访问数据库。
2、jdbc、mybatis等存在代码冗余,对其进行整合。

jdbc——jdbcTemplate
Hibernate——HibernateTemplate
MyBatis——SqlSessionFactroyBean、MapperScannerConfigure

与mybatis整合

1.配置数据库连接池(数据源)
datasourse中包含connect
2、配置sqlSessionFectoryBean
1)数据源
2)别名
3)mapper.xml文件位置
3、配置MapperScannerConfigure
1)数据源
2)Mapper接口位置

spring在整合mybatis时,事务自动提交

spring整合mybatis时,引入了外部连接池对象,连接池事务自动提交,整合后保持自动的提交这个机制(Connect.setAutoCommit(ture)),不需要手工进行事务的操作,也能进行事务的提交。

执行多条sql需要事务控制解决这个问题。

事务

ACID
原子性、一致性、隔离性、持久性

如何控制事务

1)JDBC
Connection.setAutoCommit(false);
Connection.commit();
Connection.rollback();
2)Mybatis
自动开启事务
sqlSession(Connection).commit();
sqlSession(Connection).rollback();

最终:控制事务的底层都是Connection对象完成的。

spring 控制事务

Spring通过AOP方式进行事务开发。

基于注解

1)额外功能

<bean id="dataSorseTransactionManager" class="org.springframswork.jdbc.datasourse.DataSourseTransactionManager">

2)切入点

@Transactional

3)切面
组装切入点,切面

<tx:annotation-driver transction-manager="dataSourceTransactionManeger"/>
<!-- 切换成cglib-->
<tx:annotation-driver transction-manager="dataSourceTransactionManeger" procy-target-class="true"/>

基于标签进行事务配置(代替@Transational和tx:annotation-driver)

<tx:advice id="txAdvice" transacation-manager="dataSourceTransactionManeger">
  <tx:attributes>
    <tx:method name="*" progagation="supports" read-only="true"></tx:method>
  </tx:attributes>
</tx:advice>
<aop:config>
  <aop:pointcut id="pc" expression="excution(* *(..))"/>
  <aop: advisor advice-ref="txAdvice" pointcut_ref="pc"/>
</aop:config>

事务属性

描述事务特征

隔离属性

@Transactional(isloation=)

描述并发特征
并发可能产生的问题
1)脏读:一个读取了另一个事务未提交的事务
解决 isloation=Isolation.READ_COMMITTED
2)不可重读
一个事务中两次读取数据不一样,导致数据不一致问题
解决 isloation=Isolation.REPEATABLE_READ 实质:一把行锁。
3)幻读
一个事务,多次对整表进行查询统计,结果不同,导致数据不一致。
解决 isloation=Isolation.Serializable 实质:一把表锁。

并发安全 Serializable>REPEATABLE_READ>READ_COMMITTED 运行效率相反


传播属性 Propagation

描述事务嵌套,大事务包含小事务,彼此影响,最终就会导致外部大事务丧失原子性。

只读属性readonly

异常属性

超时属性timeout

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值