DAO只是一种思想,Hibernate很好的实现了这种思想(个人观点)DAO数据库访问对象是一种模式,个人感觉这就是一种思想,用面向对象的方式操作数据库这hibernate具体是如何体现这一思想?是依赖session的一系列操作来实现的吗?还有事务管理不可以写在DAO里面,DAO是执行执久化的,事务应该出现在业务层里面,这样的好处是什么?有什么更好一些的办法来控制事务?是用spring和hibernate整合起来吗?
解决方案 »
- java 类的属性可以转换为object[]吗
- J2EE中xml文件存放的位置
- OpenSessionInViewFilter启动报错
- 在LINUX下配置Tomcat的问题。
- ServletInputStream!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- struts自定义查询分页标签的问题
- xml文档解析问题,急!!谢谢!
- Wanna to learn J2EE, start from Servlet and JSP installing?Help!!!
- weblogic的连接池的应用问题
- JDOM大侠们敬请赐教
- 怎样下载zip文件???????????????
- 把结果集封装成list 遇到问题了 高手看看怎么办
Dao不是一种设计模式,而是一种开发模式。封装一些数据库层次上的操作,对于上层业务来说只需要与 DAO 进行操作,而不需要关心具体的数据库操作。
问题二:事务管理不可以写在DAO里面,DAO是执行执久化的,事务应该出现在业务层里面,这样的好处是什么?
这个是为了保证事务的原子性,以为一次事务可能对几张表进行操作,如果其中一个操作失败了,应该全部回滚,保持事务的原子性和一致性
sf.getCurrentSession().createQuery("FROM User u WHERE u.name=?")//
.setParameter(0, "wj_myth")// 设置参数
.setFirstResult(0)// 分页参数
.setMaxResults(10)// 分页参数
.list();
如果看不出面向对象的思想,就自己面壁下~~
为什么事务要放在业务层,是因为:DAO只专注于对数据库的增删改查操作,也就是说,一个DAO只对于一张表,当操作几张表时,不可能DAO里面有几个DAO,所以就放在业务层Service,里面有几个DAO操作,事务简单说就是让这几个DAO操作,要么同时成功,要么同时失败
分层思想使程序的耦合性大大降低,在后期维护比较方便,相反耦合性太高,后期维护估计就要再次开发了。
事务是否该放在业务层?
举个例子,比如管理员要删除一个用户,同时要在日志里记录管理员删除用户的记录,如果事务加在DAO层,假如删除用户时出现了异常,那么就可能会出现用户没有被删除,但是已经有一条管理员删除了用户的日志记录了。