精通Hibernate——HQL查询详解
2015-09-02 15:50
337 查看
HQL(Hibernate query Language)是面向对象的查询语言,他具有以下功能:
1.在查询语句中设定各种查询条件
2.支持投影查询,即仅检索出对象的部分属性
3.支持分页查询
4.支持连接查询
5.支持分组查询,允许使用having和group by关键字
6.提供内聚函数,如sum、min和max
7.能够调用用户自定义的sql函数
8.支持子查询,即嵌入式查询
9.支持动态绑定参数
Session类的find方法以及query接口都支持HQL区别在于:
find:只是执行一些简单的HQL,不具有动态绑定参数的功能
query:真正的hql查询接口,支持以上提供的各种功能
例如检索姓名为Tom,并且年龄为21的Customer对象:
Query接口支持方法链编程风格,他的setString方法以及其他setXXX()方法都返回自身实例,而不是返回void,下面看看setString源码:
如果采用编程链风格
多态查询
假如Employee有两个子类,HourEmployee和SalariedEmployee,那么这个查询会查询出所有Employee类的实例,以及HourEmployee和SalariedEmployee实例,如果只想查询某个特定子类的实例:
session.createQuery(“from HourEmployee”);
分页查询
setFirstResult(int firstResult);设定从哪一个对象开始检索
setMaxResult(int maxResults);设定一次最多检出的对象数目
检索单个对象
list():返回一个List类型的查询结果,在List集合中存放了所有满足查询条件的持久化对象
uniqueResult():返回单个对象
在HQL查询语句中绑定参数
1.按照参数名字绑定
2.按照参数位置绑定
1.在查询语句中设定各种查询条件
2.支持投影查询,即仅检索出对象的部分属性
3.支持分页查询
4.支持连接查询
5.支持分组查询,允许使用having和group by关键字
6.提供内聚函数,如sum、min和max
7.能够调用用户自定义的sql函数
8.支持子查询,即嵌入式查询
9.支持动态绑定参数
Session类的find方法以及query接口都支持HQL区别在于:
find:只是执行一些简单的HQL,不具有动态绑定参数的功能
query:真正的hql查询接口,支持以上提供的各种功能
例如检索姓名为Tom,并且年龄为21的Customer对象:
//创建一个query对象 Query query = session.createQuery("from Customer as c where c.name=:customerName and c.age=:customerAge"); //动态绑定参数 query.setString("customerName","Tome"); query.setInteger("age",21); //执行查询语句,返回结果 List result = query.list();
Query接口支持方法链编程风格,他的setString方法以及其他setXXX()方法都返回自身实例,而不是返回void,下面看看setString源码:
public Query setString(int position,String val){ setParameter(position,val,Hibernate.STRING); return this; }
如果采用编程链风格
List result = session.createQuery("from Customer as c where c.name=:customerName and c.age=:customerAge").setString("customerName","Tome") .setInteger("age",21).list();
多态查询
session.createQuery("from Employee");
假如Employee有两个子类,HourEmployee和SalariedEmployee,那么这个查询会查询出所有Employee类的实例,以及HourEmployee和SalariedEmployee实例,如果只想查询某个特定子类的实例:
session.createQuery(“from HourEmployee”);
分页查询
setFirstResult(int firstResult);设定从哪一个对象开始检索
setMaxResult(int maxResults);设定一次最多检出的对象数目
Query query = session.createQuery("from Customer c order by c.name asc"); query.setFirstResult(1); query.setMaxResult(10); List result = query.list();
检索单个对象
list():返回一个List类型的查询结果,在List集合中存放了所有满足查询条件的持久化对象
uniqueResult():返回单个对象
Customer customer = (Customer)session.createQuery("from Customer c order by c.name asc").setMaxResult(1).uniqueResult();
在HQL查询语句中绑定参数
1.按照参数名字绑定
Query query = session.createQuery("from Customer as c where c.name=:customerName and c.age=:customerAge"); query.setString("customerName",name); query.setInteger("customerAge",age);
2.按照参数位置绑定
Query query = session.createQuery("from Customer as c where c.name=? and c.age=?"); query.setString(0,name); query.setInteger(1,age);
相关文章推荐
- Unity出现 error building player exception android (invocation failed)
- js和JQuery中offset等属性对比
- 内联函数和宏
- io函数
- mysql数据库千万级别数据的查询优化和分页测试
- Git基础
- vs2008【断点无效】解决方法
- TinyXML:一个优秀的C++ XML解析器
- URL编码表%20Base64编码表%20HTTP消息含义
- 一页纸说清楚“什么是推荐系统”
- mfc c++ navmesh自动寻路实现
- idea 快捷键整理 很有用的快捷键
- 在eclipse中使用Lombok
- 点击添加按钮,使用ajax动态添加一行和移除一行,并且序号重新排序和数据不重复操作判断
- cocos2d-js解析官方js-test实例入口
- 使用visualSvn创建服务器
- Java之——Spring4+Hibernate4+Atomikos3.3多数据源事务管理
- Using Session State in a Web Service
- Cocos2d-x从入门到精通第九课《Director,Scene,Layer,Sprite的关系》
- JS调用AngularJS中的方法