Hibernate HQL语言详解
2014-07-23 10:57
246 查看
from子句
在HQL语言中,可以使用from子句实现最简单的查询。
select子句
HQL查询语句中,使用from子句可以查询持久化对象的所有属性。
如果需要有选择地查询持久化对象的某些属性,则可以使用select子句进行查询
如果select子句后返回的属性都是某个持久类的属性,而没有聚集函数等,则可以使用类的构造方法,返回持久类的对象
聚集函数
HQL语句可以返回作用于属性之上的聚集函数的值。
HQL中有以下常用聚集函数:
1、avg:属性的平均值
2、min:最小值
3、max:最大值
4、sum:求值的总和
5、count:求行数
where子句
HQL语言中也定义了where子句,与SQL语言的where子句非常类似,可以定义查询条件。
where子句中的表达式也与SQL基本相同。如==、!=、><and、or、is、is not、in、like、between and等。
1、size属性或者size()函数
如果某个持久对象中有集合类型的属性,则可以使用size属性或者size()函数计算集合的大小。
2、minelement()、maxelement()函数
如果某个持久对象的属性是存储基本数据类型的集合类型,那么可以使用minelement()函数获得集合中的最小值,maxelement()函数获得集合中的最大值。
3、elements()函数
Elements()函数返回集合的元素集,在使用in、exists、any、some、all时可以使用
4、where中通过索引使用List和Array的元素
5、where中通过key值使用Map的元素
注:查询生日是国庆日的学生实例
order by子句
与SQL语句类似,HQL中也可以使用order by子句根据返回类的任何一个属性进行排序
group by子句
与SQL语句类似,HQL中也可以使用group by子句根据返回类的属性进行分组
子查询
HQL语言可以进行子查询。子查询必须使用()包含起来。
在HQL语言中,可以使用from子句实现最简单的查询。
String hql="from vo.Customer"也可以省略包名,直接通过类名查询
String hql="from Customer"为类取别名
String hql="from Customer as cust"如果from后出现多个类名,则对两个类进行连接查询,返回笛卡尔乘积。
String hql="from Customer as cust,Product as pro"from子句将返回实例对象的所有属性,并自动封装成实例对象集合。
String hql="from Customer"; Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery(hql); List<Customer> list = query.list(); for(Customer c:list){ System.out.println(c.getCustname()+" "+c.getPwd()+" "+c.getAge()+" "+c.getAddress()); }
select子句
HQL查询语句中,使用from子句可以查询持久化对象的所有属性。
如果需要有选择地查询持久化对象的某些属性,则可以使用select子句进行查询
String hql="select cust.custname from Customer as cust";
String hql="select cust.custname from Customer as cust"; Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery(hql); List<Customer> list = query.list(); for(Customer custname:list){ System.out.println(custname); }如果select子句返回多个属性,则返回结果封装到List<Object[]>集合中
String hql="select cust.custname,cust.pwd from Customer as cust"; Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery(hql); List<Customer> list = query.list(); for(Object[] obj:list){ System.out.println(obj[0]+" "+obj[1]); }
如果select子句后返回的属性都是某个持久类的属性,而没有聚集函数等,则可以使用类的构造方法,返回持久类的对象
String hql="select new Customer(cust.custname,cust.pwd) from Customer as cust"; Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery(hql); List<Customer> list = query.list(); for(Customer c:list){ System.out.println(c.getCustname()+" "+c.getPwd()); }
聚集函数
HQL语句可以返回作用于属性之上的聚集函数的值。
HQL中有以下常用聚集函数:
1、avg:属性的平均值
2、min:最小值
3、max:最大值
4、sum:求值的总和
5、count:求行数
String hql="select min(age) ,count(*) from Customer"; Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery(hql); List<Object[]> list = query.list(); for(Object[] o:list){ System.out.println(o[0]+" "+o[1]); }
where子句
HQL语言中也定义了where子句,与SQL语言的where子句非常类似,可以定义查询条件。
where子句中的表达式也与SQL基本相同。如==、!=、><and、or、is、is not、in、like、between and等。
String hql="select new Customer(custname,pwd) from Customer where age>? and address is not null"; Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery(hql); query.setInteger(0,20); List<Customer> list = query.list(); for(Customer c:list){ System.out.println(c.getCustname()+" "+c.getPwd()); }
1、size属性或者size()函数
如果某个持久对象中有集合类型的属性,则可以使用size属性或者size()函数计算集合的大小。
from Cart as cart where cart.products.size>10或者
from Cart as cart where size(cart.products)>10
2、minelement()、maxelement()函数
如果某个持久对象的属性是存储基本数据类型的集合类型,那么可以使用minelement()函数获得集合中的最小值,maxelement()函数获得集合中的最大值。
from Order as order where maxelement(order.items)<10000
3、elements()函数
Elements()函数返回集合的元素集,在使用in、exists、any、some、all时可以使用
from Cart as cart where exists elements(cart.products)
4、where中通过索引使用List和Array的元素
from Cart as cart where cart.products[0].id=='001'
5、where中通过key值使用Map的元素
from Student as stu,Calendar as cal where call.holidays['national_day']==stu.birthday
注:查询生日是国庆日的学生实例
order by子句
与SQL语句类似,HQL中也可以使用order by子句根据返回类的任何一个属性进行排序
from Customer as cust order by cust.custname asc,cust.age desc
group by子句
与SQL语句类似,HQL中也可以使用group by子句根据返回类的属性进行分组
select product.tpe avg(product.price) from Product as product group by product.type注:根据Product的type属性进行分组,查询每种类型产品的平均价格。
子查询
HQL语言可以进行子查询。子查询必须使用()包含起来。
select product.id,product.price,product.detail from Product as product where product.price>(select ave(product.price) from product)注:查询价格大于产品平均价格的Product的属性。
相关文章推荐
- Hibernate查询语言:HQL 详解(转载)
- Hibernate查询语言HQL详解
- 兔八哥笔记14(3):Hibernate 查询语言(HQL)
- HQL:Hibernate查询语言(二)
- HQL: Hibernate查询语言
- Hibernate查询语言(Query Language), 即HQL
- Hibernate查询语言HQL
- Hibernate查询语言:HQL
- Hibernate查询语言:HQL
- 关于hibernate中的HQL查询语言
- Hibernate查询语言:HQL
- 关于hibernate中的HQL查询语言
- HQL: Hibernate查询语言(ZT)
- Hibernate:HQL/QBC查询语言比较的用法(2)
- HQL: Hibernate查询语言
- HQL: Hibernate查询语言(一)
- Hibernate:HQL/QBC查询语言比较的用法(1)
- Hibernate:HQL/QBC查询语言比较的用法(1)
- Hibernate查询语言:HQL
- HQL: Hibernate查询语言(引用)