事务是指一个事的n个单元,要么一同完成,要么都完不成,避免只有部分完成所产生的问题。
在java对mysql的操作中,使用connection的开启事务,提交事务和回滚来完成这一控制。一般而言,pst.executeUpdate() 即相当于自动提交事务,但为了使多个单元成为一个事务,不会使用这一方法。
开启事务即事务的开启,是起点,之后的提交和回滚都要以此为基点,提交即在提交语句与回滚之间的mysql语句都持久化,而回滚则为提交语句与回滚之间的mysql语句都无效化。
开启事务:conn.setAutoComnmit(false);
提交事务:conn.commit();
回滚事务:conn.rollback();
因为dao层中每个方法都只能执行一个sql语句,为了使多个sql语句成为一个事务,这时只能在service层中进行集结,事务的开启和提交,回滚等,这时会出现两个问题,即Connection出现在service层和一个事务只能用同一个connection来开启,提交和回滚,后者虽然可以通过在service层创建connection对象并传参来解决,但这无疑会削弱分层的作用。
通过ThreadLocal类绑定进程和connection的方法来实现同一进程都可以获得相同的connection的方法来实现多个sql语句整合为同一事务。将创建threadlocal,获得connection和开启事务,提交,回滚的方法都写入utils类中,通过调用类的方法快速实现对事务的操作。