分层架构下的纯JDBC事务控制简单解决方案
来源:互联网 发布:mysql优化面试题 编辑:程序博客网 时间:2024/04/30 00:43
对目前的JavaEE企业应用开发来说,基本都会采用分层的架构, 这样可以分散关注、松散耦合、逻辑复用、标准定义。例如,目前使用SSH组合时典型的四层架构:表示层、业务层、持久层和数据层;那么,在四层架构中,事务的控制应该放在哪一层呢?
如果使用Spring框架,它对事务做了很好的封装,通过它的AOP配置,可以灵活的配置在任何一层;但是在很多的需求和应用,直接使用JDBC事务控制还是有其优势的。所以,本文来讨论纯JDBC事务的控制问题。
其实,事务是以业务逻辑为基础的;一个完整的业务应该对应业务层里的一个方法;如果业务操作失败,则整个事务回滚;所以,事务控制是绝对应该放在业务层的;但是,持久层的设计应该遵循一个很重要的原则:持久层应该保证操作的原子性,就是说持久层里的每个方法都应该是不可以分割的。
例如针对一个部门和员工的CRUD操作。如果要删除某个部门,就应该在DeptDao中有一个删除部门的方法:
public class DeptDao {
public void deleteDept(int id) ; //删除指定ID的部门
}
在EmpDao中有一个删除指定部门下的所有员工的方法
public interface EmpDao{
public void deleteEmpByDeptId(int id); //删除指定部门下的所有员工
}
这样,就应该在业务层DeptService中的删除部门方法中组合这两个方法,即把它们放置在同一个事务中:
public class DeptService{
public void deleteDept(int id){
try{
//启动JDBC事务
//调用EmpDao中的deleteEmpByDeptId(id)方法
//调用DeptDao中的deleteDept(id)方法
//操作正常,提交事务
}catch(Exception e){
//异常,回滚事务
}
}
}
要让这两个Dao操作在同一个事务,最主要的一点就是:启动JDBC事务中使用的数据库连接和两个Dao操作方法里获得的数据库连接要是同一个连接。参照Spring的JDBC事务原理,可以使用ThreadLocal类, 在启动JDBC事务中把数据库连接绑定到线程,以保证在同一个线程下获得的都是同一个连接。这样就达到目的了。
如下数据库工具类:
如下事务管理器类:
如下业务层类:
具体的示例代码结构如下(Eclipse工程):
如有需要,留下邮箱。
- 分层架构下的纯JDBC事务控制简单解决方案
- 分层架构下的纯JDBC事务控制简单解决方案
- 分层架构下的纯JDBC事务控制简单解决方案
- 分层架构下的纯JDBC事务控制简单解决方案
- 分层架构下的纯JDBC事务控制简单解决方案
- 分层架构下的纯JDBC事务控制简单解决方案
- 分层架构下的纯JDBC事务控制简单解决方案
- 分层架构下的纯JDBC事务控制简单解决方案
- 分层架构下的纯JDBC事务控制简单解决方案(续)
- 分层架构下的纯JDBC事务控制简单解决方案(续)
- 抛弃框架,如何实现分层架构下JDBC事务的控制
- 抛弃框架,如何实现分层架构下JDBC事务的控制
- (6)理解事务处理、事务处理的隔离级别,和使用JDBC进行事务处理||抛弃框架,如何实现分层架构下JDBC事务的控制
- JDBC的事务控制
- JDBC的事务控制
- JDBC的事务控制
- JDBC的事务控制
- JDBC事务的控制问题
- 利用第三方工具扩展hardware inventory
- 数据库设计中的14个技巧
- 我大学同学的愿望
- 程序调试工具
- 重装Oracle SID存在解決办法
- 分层架构下的纯JDBC事务控制简单解决方案
- 自动化测试之惑
- 杂~
- 每天读一遍,不久你就会变!
- Linux ftp配置
- 演绎和实践
- How To ... Develop A Transform Lock Script(如何开发一个变换锁脚本)
- Struts第六天
- *p++的运算顺序