一、前言
小编先前使用过SQL,基本语法自己也会使用。后来在项目中遇到了HQL,稍微有点不同,他到底是什么呢?
二、什么是HQL?
HQL(Hibernate Query Language)是Hibernate提供的一种面向对象的查询语言,HQL提供了更加丰富灵活的特性、强大的查询能力,HQL提供了更接近传统的SQL语句的查询语法。
三、HQL语法分析
3.1 完整的HQL语句结构:
[select [distinct] field_ list|update |delete ] from EntityName
[where where_ condition]
[group by group_by_expression ]
[having where where_condition]
[order by order_by_expression [ASC | DESC]]
使用HQL需要以下四步:
(1)得到Session对象
(2)编写HQL语句
(3)创建Query对象
(4)执行查询,得到结果。
3.2 查询
- select子句语法:
select [distinct] field_list from EntityName;
语法中:
distinct可以去除结果中重复的数据。
EntityName是持久化类名,也就是实体名。
field_list是持久化类字段列表,也就是实体的属性。
- 动态构造对象
可以利用HQL提供的动态构造实例的功能对这些数据进行封装。
动态构造对象语法:
//通式
select new EntityName(alias.field[,....]) from Entity as alias;
//具体例子
select new User(user.name,user.age) from Useras user;
在语法中:
EntityName是持久化类名;
alias为持久化类别名;
field是持久化类中的字段;
3.3 更新update子句
update [from] EntityName as alias set alias.field = value[,...] where where_condition
在语法中:
EntityName 是持久化类名;
field 是持久化类中的字段;
3.4 删除delete子句
delete [from] EntityName as alias where where_condition
在语法中,EntityName是持久化类名;
3.5 参数绑定
- 按名称绑定
在HQL中定义命名参数要用“:”开头,用Query接口的query.setParameter(fieldname.value)方法设定数值。
示例:
Query query = session.creteQuery(
"form User user where user.name=:name and user.age=:age");
query.setString("name",name);
query.setString("age",age);
- 按位置绑定
在HQL查询语句中中“?”来定义参数的位置,用Query接口的query.setParameter(index,value)方法设定参数值。
示例:
Query query = session.creteQuery(
"form User user where user.name=? and user.age=?");
query.setString(0,name);
query.setString(1,age);
温馨提示:
在实际开发中,提倡使用按名称绑定参数,因为这不但可以提供非常好的程序可读性,而且还能提高程序的易维护性,因为当查询参数的位置发生变化时,按名称绑定不需要调整程序的代码。
3.6 order by排序
order by 子句的语法:
[select [distinct] field_ list|update |delete ] from
EntityName [where where_ condition] [order by order_by_expression [ASC | DESC]]
在语法中:
EntityName 是持久化类名;
order_by_expression 是指定要排序字段或表达式;
3.7 分组
- group by 子句
group by 子句语法:
[select [distinct] field_ list|update |delete ] from
EntityName [where where_ condition] [group by group_by_expression ]
- having 子句
having 子句的语法:
[select [distinct] field_ list|update |delete ] from
EntityName [where where_ condition] [group by group_by_expression ] [having where where_condition]
在语法中,having关键字一定要和group by 搭配使用。
小结
对比学习,在以后的使用过程中,我们会越来越强, 加油!everybody can do it!