说到hibernate的查询方式,我们自然而然就想到了它——hql,hibernate query language.hql是使用hibernate框架的变成配朋友们使用最多的一种方式,它以自身的独特的优势:屏蔽数据库,书写灵活的优点,备受大家的青睐。但是Hibernate不仅给我们提供了这一种查询方式,这时候悠然要说来,是不只一种,还有sql,对,确实还有sql,但是还有一种,就是Criteria 查询。那么今天,我们就来聊一聊hibernate的几种查询方式。
Hibernate的查询方式有六种:Hql,Sql,Criteria,DetachedCriteria,QBE(query by example),命名查询。这里我们就说说种Hibernate常用的查询方式的使用及其利弊。
hql是最常用的,有如下优点:
弊端:
PS: 在hql中关键字不区分大小写,但是属性和类名区分大小写。
接下来,我们看示例代码:
static void queryTest(String name)
{
Session s=null;
try
{
s=HibernateUtil.getSession();
//from后面是对象,不是表名
String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。
Query query=s.createQuery(hql);
query.setString("name", name);
List<Admin> list=query.list();
for(Admin admin:list)
{
System.out.println(admin.getAname());
}
}finally{
if(s!=null)
s.close();
}
}
这种方式比起HQL来说更加的面向对象,不需要我们写任何的查询语句,hql也好,sql也好,我们就只需要告诉session,我们要查询什么,条件是什么。
一般需要以下三个步骤:
1、 使用Session实例的createCriteria()方法创建Criteria对象
2、使用工具类expression的方法为Criteria对象设置查询条件;
Order工具类的方法设置排序方式;
Projections工具类的方法进行统计和分组。
3、使用Criteria对象的list()方法进行查询并返回结果
这种查询的优点是:
缺点:
- 适用面相对于HQL来说有限。
因为面向对象 了,那么封装严了,同时灵活性方面就相对的减少了,因为目前提供的工具类中还不能像直接写hql语句那么灵活。
以下是操作示例:
static void qbc(String name,String password){
Session session=null;
try{
session=HibernateUtil.getSession();
Criteria criteria=session.createCriteria(Admin.class);
//eq是等于,gt是大于,lt是小于,or是或
criteria.add(expression.eq("aname",name));
criteria.add(expression.eq("apassword", password));
List<Admin> list=criteria.list();
for(Admin admin:list){
System.out.println(admin.getAname());
}
}finally{
if(session!=null)
session.close();
}
}
以上两种查询方式的优点:
缺点:
这种查询方式,我就不需要过多的解释了,就是我们原生的SQL语句进行查询。看例子
static List sql() {
Session s = HibernateUtil.getSession();
Query q = s.createSQLQuery("select * from user").addEntity(User.class);
List<User> rs = q.list();
s.close();
return rs;
}
优点:
缺点:
使用场合:系统不需要换数据库的情况下,还是sql使用方便,效率高。
以上是三种查询方式,下篇博客我们继续DetachedQuery,命名查询方式。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wangyongxia921/article/details/48109413