在一个业务的实现过程中,可能需要多条sql完成对数据库的操作,比如账户登录,需要匹配用户名和密码,然后要增加积分,还要记录登录的ip和时间,这可能需要三个sql语句,这三个语句应当是一个整体,任意一个sql执行不成功,都表示这个业务没有执行完成,这就有了事务的概念。

事务是数据库中的概念,就是对数据库的一组操作,由一条或多条sql组成。

事务具有同步的特点,一条sql执行失败,其他sql都不会执行,即要么都执行,要么都不执行。

START TRANSACTION开启一个事务,这之后执行的sql语句,在用COMMIT提交事务之前,都没有被"写死"到数据库中,可以用ROLLBACK进行回滚操作。

Spring在jdbc中提供了一个事务管理组件:org.springframework.jdbc.datasource.DataSourceTransactionManager

<!-- 配置事务管理组件 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dbcp"> <!-- dbcp是连接池组件(org.apache.commons.dbcp2.BasicDataSource)的bean -->
</bean>

使用事务管理的功能,跟创建bean一样,可以采用注解和xml配置两种方式。当然可能还有别的方式,还没学到

<!-- 采用注解方式:有源码的情况下,将注解加在方法上 -->
<!-- 开启事务注解标记@Transactional,当调用带@Transactional标记的方法时,将txManager的事务管理功能切入进去 -->
<tx:annotation-driven transactional-manager="txManager" />
<!-- 在需要事务管理的方法上加上@Transactional注解即可 -->
<!-- 采用xml配置的方式:使用别人写好的功能,没有源码,就可以用xml配置 -->
<tx:advice id="txAdvice" transaction-manager="txManager" > <!-- 仍然使用txManager作为事务管理组件 -->
<tx:attributes>
<tx:method name="updateTitleAndBody" /> <!-- 在哪些方法上添加事务管理 -->
<tx:method name="register" /> <!-- 这里写方法名 -->
<tx:method name="checkLogin" /> <!-- 支持通配符 -->
<tx:method name="listNotebook" />
<tx:method name="getDeletedNotes" />
</tx:attributes>
</tx:advice>
<!-- 通过aop机制完成事务管理 -->
<aop:config> <!-- 作用在哪些组件上 -->
<aop:pointcut id="target" expression="within(net.sonng.note.service.UserServiceImpl)" />
<!-- 这个expression的写法有讲究 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="target"/>
</aop:config>

其他:MyBatis应该也提供了事务管理的组件

最新文章

  1. 【LeetCode】#1 Two Sum
  2. Reverse Integer [LeetCode]
  3. Cocos2D-x搭建新环境注意事项
  4. [BILL WEI]一些经常用到的SQL函数
  5. JavaBean基础
  6. nginx之如何获取真实客户端ip
  7. iOS 创建推送证书
  8. mockjax MOCK.js的拦截ajax请求
  9. 1104--DNA排序
  10. C++ - Operator Precedence
  11. POJ1469_COURSES(二部图最大匹配)
  12. Java 垃圾回收(GC) 泛读
  13. PHP中小小的header函数
  14. 在Ubuntu下安装OpenJDK的方法
  15. (转载)sqlmap用户手册详解
  16. 微信公众号Java接入demo
  17. 【hibernate】1、Hibernate的一个注解 @Transient
  18. BZOJ5372 PKUSC2018神仙的游戏(NTT)
  19. 《转》Pragma: no-cache 对性能的影响
  20. 20172302 《Java软件结构与数据结构》第四周学习总结

热门文章

  1. [Git] 给git命令起别名
  2. python logging模块用法
  3. Java中设置classpath、path、JAVA_HOME的作用?
  4. Android-Universal-Image-Loader载入图片
  5. iOS:手势的详解UIGestureReconizer
  6. 预防U盘被病毒侵害的方法
  7. Net编程 详解DataTable用法【转】
  8. Dev之ribbon设置
  9. 【翻译自mos文章】在11gR2 rac环境中,文件系统使用率紧张,而且lsof显示有非常多oraagent_oracle.l10 (deleted)
  10. XAMPP + Xdebug+Zend Studio