牛人们都说dao是反模式,认为需要取消dao。 以前写个dao,需要一个DAO的基类、spring的注入、泛型,甚至要声明一个dao的接口,比拟繁琐。 大少数状况下,我认为我们需要一个复杂的实现,既不要程序员为了处理数据,声明dao的实现,做很多事情,又能比拟方便的实现对数据操作的解耦。JPA的EntityManager提供了一个很好的例子,但是假如我们用Hibernate则无法运用。于是参考JPA的 EntityManager实现,和SpringSide的SimpleHibernateDao实现,我们对Session做如下的封装,代码参见附件。 经过在Service中注入这个Wrapper,我们就拥有了复杂的数据访问才干,而不需要为每个业务声明DAO的接口,并将其注入 Service或在Service中实例化。也不必该类提供任何泛型的定义,只需给出实体类的声明即可。看一个Service的列子: Java代码 @Autowired protected HibernateSessionWrapper wrapper; @Transactional(readOnly = true) public Customer get(Long id) { return wrapper.get(Customer.class, id); } public Customer logicDelete(Long id) { Customer customer = get(id); customer. taoyi8.info 记忆枕 setStatus(Customer.STATUS_INACTIVE); wrapper.save(customer); return customer; }
|