整合Mybatis方式二:
步骤:
(1)对应数据库的实体类:
(2)方法的接口:
(3)实现接口中方法的Mapper.xml文件:
(4)mybatis配置文件(只写别名和设置)
(5) spring配置文件(spring数据源 sqlSessionFactory 绑定mybatis配置文件 此种方式不需要写
SqlSessionTemplate)
这种方式在配置文件时,节省了一步配置。
(6) SqlSessionDaoSupport 中间类 实现功能:
(7)整合mybatis和spring的最终xml文件:
(8)测试类:
这种方式我们的中间类也变得比较简单了。
测试结果:
13. 声明式事务
1.回顾事务
把一组业务当成一个业务来做,要么都成功,要么都失败!
事务在项目开发中,十分重要,涉及到数据的一致性问题,不能马虎!
确保完整性和一致性;
事务的ACID原则:
原子性
一致性
隔离性 (多个业务可能操作同一个资源,防止数据损坏)
持久性(事务一旦提交,无论系统发生什么问题,结果都不会再被影响,被持久化的写到存储器中!)
2.我们现在不加spring事务会遇到的问题:
原数据库表:
我们重新来整个一个新的mybatis-spring项目:
(1)实体类:
(2)接口:
(3)实现接口中方法的xml文件:
(4)mybatis配置文件(只写别名和设置):
(5)
spring配置文件(spring数据源 sqlSessionFactory 绑定mybatis配置文件 此种方式不需要写
SqlSessionTemplate):
(6) SqlSessionDaoSupport 中间类 实现功能:
(7) 整合mybatis和spring的最终xml文件:
(8)测试类:
但是我们这个项目,在整合的第三步时,Mapper.xml中的删除方法,sql代码写错了:
delete写成了deletes,很显然,我们测试的结果一定是会报错的:
但是不符合常理的是,我们去刷新我们的数据库:
删除不好使,添加竟然添加进数据库了,但是增删查我们是在一个方法里调用的,这显然不符合我们所希望看到的。所以就要引入spring最后的一个内容:spring中的事务。
2.Spring中的事务管理
声明式事务:AOP
编程式事务:需要在代码中,进行事务的管理
我们先恢复到原来的数据库表:
我们只需要在spring-dao (spring配置文件)里配置上事务就可以了:
基本上是死的写法,应用时只需修改就好。
我们再去测试:
查看数据库:
我们发现数据库和我们预想的一样。
思考:
为什么需要事务?
如果不配置事务,可能存在数据提交不一致的情况下;
如果我们不在spring中去配置声明式事务,我们就需要在代码中手动配置事务!
事务在项目的开发中十分重要,涉及到数据的一致性和完整性问题,不容马虎!