本人觉得Hibernate4不用getHibernateTemplate以后不好用了,特别是每个DAO组件的实现类的save和update方法都要写更多的代码了,不知有没有好的方法让save和update少写一些代码,而不是在hql里用insert语句把pojo的全部属性都写出来才能插入?
public class MemberDaoImpl implements MemberDao { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public Member get(Integer id) { Session session = sessionFactory.openSession(); String hql = "from Member"; Query query = session.createQuery(hql); List l = query.setFirstResult(id) .setMaxResults(1).list(); return (Member)l.get(0); } public Integer save(Member member) { return (Integer)getHibernateTemplate() .save(member); //这句换成什么? } public void update(Member member) { getHibernateTemplate() .update(member); //这句换成什么? } }
解决方案
25
你可以本人实现一套hibernate工具类,spring本身也是这样提倡的。例如这样:
@Repository("baseDAO") public class BaseDAOImpl implements BaseDAO { @Resource(name = "sessionFactory") private SessionFactory sessionFactory; private Session getCurrentSession() { return sessionFactory.getCurrentSession(); } private void flushAndClear() { this.getCurrentSession().flush(); this.getCurrentSession().clear(); } public Serializable save(Object o) { return this.getCurrentSession().save(o); } public void delete(Object o) { this.getCurrentSession().delete(o); this.getCurrentSession().flush(); } public void update(Object o) { this.getCurrentSession().update(o); this.getCurrentSession().flush(); } public void saveOrUpdate(Object o) { this.getCurrentSession().saveOrUpdate(o); this.getCurrentSession().flush(); } }
hql查询你当然也可以去封装一些好用的方法,总之没有getHibernateTemplate()并不是末日