DAO只是一种思想,Hibernate很好的实现了这种思想(个人观点)DAO数据库访问对象是一种模式,个人感觉这就是一种思想,用面向对象的方式操作数据库这hibernate具体是如何体现这一思想?是依赖session的一系列操作来实现的吗?还有事务管理不可以写在DAO里面,DAO是执行执久化的,事务应该出现在业务层里面,这样的好处是什么?有什么更好一些的办法来控制事务?是用spring和hibernate整合起来吗?

解决方案 »

  1.   

        Hibernate是一种ORM(Object-Relation Mapping)中间件,说到底也就是可以将数据库表中的数据包装为java对象,又可以将java对象映射到数据库表中的数据。故hibernate在java对象与数据库之间起着一个桥梁作用。
        Dao不是一种设计模式,而是一种开发模式。封装一些数据库层次上的操作,对于上层业务来说只需要与 DAO 进行操作,而不需要关心具体的数据库操作。
      

  2.   

    问题一:用面向对象的方式操作数据库,这hibernate具体是如何体现这一思想?是依赖session的一系列操作来实现的吗?hibernate是读取配置文件的映射关系进行对象的修改以及数据库的持久化
    问题二:事务管理不可以写在DAO里面,DAO是执行执久化的,事务应该出现在业务层里面,这样的好处是什么?
    这个是为了保证事务的原子性,以为一次事务可能对几张表进行操作,如果其中一个操作失败了,应该全部回滚,保持事务的原子性和一致性
      

  3.   

    hibernate是完全体现面向对象的思想,在hibernate的任何操作都能体现,API就不说,这当然是面向对象,主要还体现在自己创建sql语句的时候,是通过创建HQL语句,然后hibernate生成SQL,然而你不需要专注于设计SQL语句,因为这不是面向对象的东西。在创建HQL也体现出面向对象的思想,如:
    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操作,要么同时成功,要么同时失败
      

  4.   

    hibernate是JPA的实现,个人认为就是对JDBC的封装。
    分层思想使程序的耦合性大大降低,在后期维护比较方便,相反耦合性太高,后期维护估计就要再次开发了。
    事务是否该放在业务层?
    举个例子,比如管理员要删除一个用户,同时要在日志里记录管理员删除用户的记录,如果事务加在DAO层,假如删除用户时出现了异常,那么就可能会出现用户没有被删除,但是已经有一条管理员删除了用户的日志记录了。