hibernate常用的两种查询hql和criteria
hibernate给人的感觉真的是又爱又恨,倒也不是说它不好用,主要还是因为精通它的人太少了加之复杂的查询也做不了,只能勉强做一些简单或者性能要求不是特别高的项目或产品。这次打算分享下我学习hibernate最常用的两种查询的心得。使用hibernate做复杂的查询一直存在争议,hibernate虽然也支持sql语句查询但是使用起来不是那么方便,也不是很好掌握。个人建议就是做复杂查询的时候就不要用hibernate了,可以使用ibatis或者直接使用jdbc来实现相应的功能。现在hibernate最常用的查询方式有两种分别是hql和criteria。
一 Criteria查询方式
这种查询方式比较面向对象一些,我也比较喜欢使用这种查询方式,因为它不用写任何的sql或者hql语句
public void testCriteria() {
Session ses=null;
try{
ses=HibernateUtil.getSession();
Object[] t={1,2};
Criteria c=ses.createCriteria(Article.class);
c.add(Restrictions.in("id",t));
List<Article> all=c.list();
Iterator<Article> it=all.iterator();
while(it.hasNext()){
Article article=it.next();
System.out.println(article.getName());
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(ses!=null){
ses.close();
}
}
}
目前criteria提供的查询条件已经可以满足基本的查询要求,但是复杂的查询还是不怎么行得通
二 hql的查询方式
这种方式和原生的sql语句有一定的差异,复杂度也高得多
public void testHql() {
Session ses=null;
try{
ses=HibernateUtil.getSession();
String hql="from Article A where A.id>1";
Query q=ses.createQuery(hql);
List<Article> all=q.list();
Iterator<Article> it=all.iterator();
while(it.hasNext()){
Article article=it.next();
System.out.println(article.getName());
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(ses!=null){
ses.close();
}
}
}
hql对于稍微复杂的查询虽然可以应对,但是由于hql和原生的sql差异较大,书写的时候有一定困难
hibernate在很多方面有一统天下的势头,但是应对复杂的业务逻辑或者报表查询,hibernate的缺点却暴露的一览无遗,hibernate虽然支持sql查询但是用起来觉得很别扭.
还没有评论,来说两句吧...