categories: spring5

事务回顾

  • 事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎!

  • 事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性。

事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用

事务四个属性ACID

  • 原子性(atomicity)

    • 事务是原子性操作,由一系列动作组成,事务的原子性确保动作要么全部完成,要么完全不起作用
  • 一致性(consistency)
    • 一旦所有事务动作完成,事务就要被提交。数据和资源处于一种满足业务规则的一致性状态中
  • 隔离性(isolation)
    • 可能多个事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏
  • 持久性(durability)
    • 事务一旦完成,无论系统发生什么错误,结果都不会受到影响。通常情况下,事务的结果被写到持久化存储器中

测试事务

userDao接口新增两个方法,删除和增加用户

//添加一个用户
int addUser(User user); //根据id删除用户
int deleteUser(int id);

mapper文件,我们故意把 deletes 写错,测试!

 <insert id="addUser" parameterType="com.kuang.pojo.User">
insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert> <delete id="deleteUser" parameterType="int">
deletes from user where id = #{id}
</delete>

测试

public class EmployeeMapperImpl extends SqlSessionDaoSupport implements EmployeeMapper {

    public List<Employee> getEmployees() {
return getSqlSession().getMapper(EmployeeMapper.class).getEmployees();
} public int addEmployee(Employee employee) { return getSqlSession().getMapper(EmployeeMapper.class).addEmployee(employee);
} public int deleteEmployee(int id) {
return getSqlSession().getMapper(EmployeeMapper.class).deleteEmployee(id);
} //多个事务的简单程序整合
public void test1(){
Employee newEmployee = new Employee(50, "拉纳", "男", "oo.pp@cop");
EmployeeMapper mapper = getSqlSession().getMapper(EmployeeMapper.class);
mapper.addEmployee(newEmployee);
System.out.println("已添加50号");
mapper.deleteEmployee(5);
System.out.println("删除5号");
}
}

测试

@org.junit.Test
public void test1(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("Application.xml");
EmployeeMapperImpl employeeMapperImpl = context.getBean("employeeMapperImpl", EmployeeMapperImpl.class);
employeeMapperImpl.test1();
}

报错:sql异常,delete写错了

结果 :插入成功!

没有进行事务的管理;我们想让他们都成功才成功,有一个失败,就都失败,我们就应该需要事务!

以前我们都需要自己手动管理事务,十分麻烦!

但是Spring给我们提供了事务管理,我们只需要配置即可;

最新文章

  1. [转]PhoneGap使用PushPlugin插件实现消息推送
  2. 【Gym 100685J】Just Another Disney Problem(交互/排序)
  3. PKCS10生成证书csr
  4. Channel 详解
  5. rc522 ,pn544区别
  6. java菜鸟篇&lt;三&gt; Jquery弹窗插件Lhgdialog的用法( 原文搬抄+添加,方便以后查找,书签太多了)
  7. Ubuntu下安装ADT(图文教程)
  8. Maven入门1-在Eclipse中新建Maven Web项目
  9. word的标题行前面数字变成黑框 解决方案
  10. FxCop卸载后依然生成文件夹的问题
  11. C#串口通讯概念以及简单实现
  12. sciense
  13. mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
  14. trivial and nontrivial
  15. Python 的文件处理
  16. C# 注册机功能开发,机器码设计
  17. 【转】SAP BW 顾问靠手 — SAP中的例程
  18. java public,default,protected,private区别
  19. Git 使用中显示“Another git process seems to be running in this repository...”问题解决
  20. android动态权限获取

热门文章

  1. CodeGen融合核心扩展定制文件
  2. python工业互联网应用实战18—前后端分离模式之jquery vs vue
  3. 尚硅谷Java——宋红康笔记【day11-day18】
  4. frp实现NAS外网访问
  5. 【NX二次开发】Block UI 面收集器
  6. 【NX二次开发】判断面是否相切,相切面。
  7. 白日梦的MySQL专题(第38篇文章)8分钟回顾MySQL的索引
  8. 基于ABP落地领域驱动设计-01.全景图
  9. WPF中选择文件和选择文件夹的方法
  10. SqlServer的order by问题