本人觉得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()并不是末日