Hibernate HQL语言详解

from子句

在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的属性。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值