Hibernate3换成Hibernate4以后DAO组件实现类的各个方法都不能一行代码解决了,怎么办

J2EE 码拜 9年前 (2016-03-15) 925次浏览
本人觉得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()并不是末日


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Hibernate3换成Hibernate4以后DAO组件实现类的各个方法都不能一行代码解决了,怎么办
喜欢 (0)
[1034331897@qq.com]
分享 (0)