Hibernate对于复杂查询好用吗?

之前只用过Hibernate做过一些小的开发,只涉及到简单的增删改查的数据库操作.象在DAO的实现类里就继承了HibernateDaoSupport类,然后调用getHibernateTemplate()方法进行操作,我一般都只用到sava(),delete(),update()几个简单的方法,做过最复杂的也就下面这段代码(还是仿照老师的代码写的): /*** 查询会员 */ public List query(final Myusers u) { List rel=null; rel=(List)this.getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { List inrel=null; Criteria cri= session.createCriteria(Myusers.class); if(u!=null){ if(u.getUname()!=null){ cri.add(Restrictions.like("uname", "%" + u.getUname() + "%")); } } inrel=cri.list(); return inrel; } }); return rel; }

这也只是一个简单的查询功能,用的方法就这么复杂了(感觉转了几个弯,不大理解),那以后要是开发大的项目的话,用Hibernate进行更复杂数据库操作写的方法不是更复杂了??是不是Hibernate就是这样啊??请懂的人帮忙解释一下,在这里先谢了! (注:我学的比较浅,问的问题太白痴的话啊请各位不要笑啊!) [该贴被admin于2009-04-02 09:03修改过]

可以自己扩展Template,像我们就觉得spring送的那个样板不适合我们用,自定义了两套。 根据反射可以自动解析出字串,left like,full like等都可以定制,可以忽略对象里的空值或零值域,结合json在传入传出参数的时候很有用。 并且现在因为有1.5的范型和不定参数,可以定制出更方便的dao,方法定义时多加个类型参数就行了,条件值在最后排着写下去,遇到集合的都用in查询。反正我觉得要比jdbc简易。

还是不明白啊!

就是说这不关hibernate的事,您所使用的getHibernateTemplate()等是spring赠送的一个样板封装,如果觉得这个不好用可以自己封装一个适合自己的。 例如针对您例子当中的查询我们就有自己定义的封装:

public List<T> findByLikeExample(T entity) {
	return this.findByExample(entity, MatchMode.ANYWHERE);
}
private List<T> findByExample(T entity, MatchMode matchMode) {
	Example entityExample = Example.create(entity);
	entityExample.ignoreCase().enableLike(matchMode);
	entityExample.excludeNone();
	entityExample.excludeZeroes();
	Criteria criteria = getSession().createCriteria(getEntityClass()).add(
			entityExample);
	return criteria.list();
}
使用的时候只需要:
Myusers u=new Myusers();
u.setUname("who");
List<Myusers> ulist=mydao.findByLikeExample(u);
这看起来简易得多了吧,因为制定了更适合自己用的样板。

具体的不清楚,但是大概的方向懂了.说到底还是我对Hibernate研究得还不够透彻啊,一直以为只有那个模版可用,还有就是自己太懒了,看来需要加强啊!