大家都知道,现在的互联网后端服务总共分3层:dao层、service层和controller层。今天我们来学习一下dao层与service层之间的数据访问问题,看看它们之间是怎么交互的。
dao层与service层之间的交互,简单说来,就是service层会去调用dao层,而在调用dao层的时候就必然要用到事务。有些新手朋友在初次写后端程序的时候,往往不知道这里有事务问题,以为就像直接调用API一样,调用一次insert/update/delete操作就修改一次数据库,十分简单明了,而且测试也没发现问题,一切正常。其实这样写的程序主要运行在内网、小规模系统环境中,甚至单机运行,这对数据一致性要求不那么高,所以未出错。但是一旦部署到线上高并发运行环境中去,数据很有可能不一致,这是因为没有处理好事务。
另外,后端服务DAO层一般是接入或使用了ORM框架的,例如Hibernate、JPA、MyBatis等。这些框架主要目的是减少样板代码,提高开发效率。这些不同ORM框架的设计差异很大,却能被Spring框架定义成一套通用的接口,封装起来供我们使用(题外话:不得不说,Spring开发者的抽象化和设计能力真的非常强,值得学习)。
Spring 事务管理
spring的事务管理特别强大,优势如下:
- 统一的编程模型支持多种不同的事务API,包括JTA、JDBC、Hibernate、JPA等。
- 声明式事务管理功能:即只需要声明,加一个注解就搞定一切了。让事务功能用起来简单。
- 编程式事务管理:Spring对底层的事务API进行了抽象和简化。
- 能够高效集