Hibernate学习笔记(九) — Hibernate的查询
来源:互联网 发布:网络用语橙汁什么意思 编辑:程序博客网 时间:2024/05/01 23:14
Hibernate共提供以下三种检索方式
HQL检索方式:
1.通过 Session 的 createQuery() 方法创建一个 Query 对象, 它包括一个 HQL 查询语句. HQL 查询语句中可以包含命名参数
2.动态绑定参数
3.调用 Query 的 list() 方法执行查询语句. 该方法返回java.util.List 类型的集合, 在 List 集合中存放了符合查询条件的持久化对象.
4.Qurey 接口支持方法链编程风格, 它的 setXxx() 方法返回自身实例
Hibernate 的参数绑定机制依赖于JDBC中的 PreparedStatement 的预定义 SQL 语句功能.
两种形式:
按参数名字绑定: 在 HQL 查询语句中定义命名参数, 命名参数以 “:” 开头.(hibernate特有)
Query query = session.createQuery("from Classes where name=:name1");query.setParameter("name1", "asdj");
按参数位置绑定: 在 HQL 查询语句中用 “?” 来定义参数位置
Query query = session.createQuery("from Classes as c where c.name=?");query.setParameter(0, "asdj");//别名as,可省略
HQL采用ORDER BY关键字对查询结果排序
Query query = session.createQuery("from Classes as c order by c.id");List<Classes> classes = query.list();
分页查询
setFirstResult(intfirstResult): 设定从哪一个对象开始检索, 参数 firstResult 表示这个对象在查询结果中的索引位置, 索引位置的起始值为 0. 默认情况下, Query 从查询结果中的第一个对象开始检索
setMaxResult(int maxResults): 设定一次最多检索出的对象的数目. 在默认情况下, Query 和 Criteria 接口检索出查询结果中所有的对象
List<Classes> classes = query.setFirstResult(1).setMaxResults(5).list();
投影查询:
查询结果仅包含实体的部分属性. 通过 SELECT 关键字实现.
Query的list()方法返回的集合中包含的是数组类型的元素, 每个对象数组代表查询结果的一条记录
可以在持久化类中定义一个对象的构造器来包装投影查询返回的记录
可以通过 DISTINCT 关键字来保证查询结果不会返回重复元素
from Customer c join c.orders o where o.orderNumber like ‘X%’如果希望查询结果中只包含Customer对象,可使用以下形式select c from Customer c join c.orders o where o.orderNumber like X%’Select关键字还能用于选择对象的部分属性session.createQuery("select c.id,c.name,o.orderNumber from Customerc join c.orders o where o.orderNumber like 'X%'")其对应的sql语句为select c.id,c.name,o.ORDER_NUMBER from CUSTOMERS c inner join ORDERS o on c.ID = o.CUSTOMER_ID where o.ORDER_NUMBER like 'X%'通过 DISTINCT 过滤重复元素createQuery("select distinct c.name from customer c");
Query query = session.createQuery("select " new cn.abc.Customer(c.id,c.name,o.orderNumber) " + " from Customer c join c.orders o where o.orderNumber like '%X%'");List list = query.list();
分组
HQL利用GROUP BY 关键字对数据分组,用HAVING 关键字对分组数据设定约束条件.List list=session.createQuery("select c.name,count(c) from Customer c group by c.name").list();System.out.println(list.size());
聚合函数
Query query = session.createQuery("select count(*) from Customer c");Integer count=(Integer)query.uniqueResult();System.out.println("count "+count);Query query = session.createQuery("select avg(c.age) from Customer c");Float avg=(Float)query.uniqueResult();System.out.println("avg "+avg);Query query = session.createQuery("select max(c.age),min(c.age) from Customer c");Object[] objs=(Object[])query.uniqueResult();System.out.println("max "+(Long)objs[0]);System.out.println("min "+(Long)objs[1]); Query query = session.createQuery("select sum(c.age) from Customer c");Long sum=(Long)query.uniqueResult();System.out.println("sum "+sum);
QBC 检索方式
短语
含义
Restrictions.eq
等于=
Restrictions.allEq
使用Map,使用key/value进行多个等于的判断
Restrictions.gt
大于>
Restrictions.ge
大于等于>=
Restrictions.lt
小于<
Restrictions.le
小于等于<=
Restrictions.between
对应sql的between子句
Restrictions.like
对应sql的like子句
Restrictions.in
对应sql的in子句
Restrictions.and
and 关系
Restrictions.or
or关系
Restrictions.sqlRestriction
Sql限定查询
Criteria criteria=session.createCriteria(Customer.class); //设定查询条件,每个Criterion实例代表一个查询条件Criterion cn1=Restrictions.eq("name", "tom1");criteria.add(cn1);list=criteria.list();
应用的时候从帮助文档看看例子即可
本地SQL的查询方式
query = session.createSQLQuery(本地sql语句);
- Hibernate学习笔记(九) — Hibernate的查询
- Hibernate学习笔记(九)Hibernate 查询方式
- Hibernate学习笔记(九)
- hibernate学习笔记(九)
- Hibernate学习笔记(七) — 查询缓存的应用
- hibernate学习笔记——hql查询
- Hibernate学习笔记(十) — HQL查询
- Hibernate学习笔记之查询
- Hibernate基本查询(学习笔记)
- Hibernate学习笔记 查询简介
- Hibernate的学习笔记
- Hibernate的学习笔记
- Hibernate的学习笔记
- Hibernate的学习笔记
- [学习小笔记] hibernate的简单数据库查询
- Hibernate(九)HQL查询二
- Hibernate学习笔记(三) — Hibernate 的一级缓存意义
- Hibernate学习笔记(六) — Hibernate的二级缓存
- userInteractionEnabled
- Glib多线程编程
- 多少人知道需求规格说明书是什么
- FusionCharts参数说明——3D饼图属性(Pie3D.swf )
- 使用函数的小细节
- Hibernate学习笔记(九) — Hibernate的查询
- 2016 C语言面试题——字符串函数的实现
- 建立链表和打印链表简单代码
- 一个可以将usb摄像头的视频和麦克风采集的声音以RTMP协议发布到RTMP Server的应用程序
- Hibernate持久化对象的三个状态
- UVA 10375 - Choose and divide【唯一分解定理】
- J-- DZY Loves Sequences(CF-447C
- 获取通讯录
- HDOJ M斐波那契数列 4549【矩阵快速幂+快速幂+费马小定理+欧拉函数】