以前公司使用的一直是ibatis,ibatis相对于hibernate而言,轻量级的多,只是封装了数据库访问层。所以使用起来并没有hibernate的那么强大。
以前系统代码层面的架构一般是:
action -> facade/manager ->dao ->db其中manager层处理的是业务逻辑,内部包括事务控制等方面,而dao只是简单的数据库原子操作,诸如简单的getById等。
transactionTemplate.execute(new xxxcallBack{
.....
xxxDAO.getByIdForUpdate();
....
....
xxxDAO.update();
....
});现在切换到hibernate,发现其中如果再次使用上述方式。
每一个DAO类中都会进行HibernateUtil.getCurrentSession();
.....
.....
HibernateUtil.closeSession();这样一个manager逻辑中,会有频繁的session的开关,性能上岂不是很难以接受?
对于DAO而言,我仍旧希望提供最原子的db操作,而不要参入业务逻辑。
其中的session的开和关,是否是数据库连接的频繁开关?这个和之前使用ibatis的方式,应该是有区别的吧?
另外,dao中我不希望参入事务控制,因为我希望的dao是针对单库单表的原子操作。
我的事务将在manager层中根据业务需求控制。这样的话,该如何设计hibernate的dao呢?
这就是我个人的一个疑惑吧,或许我刚上手hibernate,对底层机制并不熟悉,希望大牛们解释一下,谢谢。