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语句);

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 幼儿园的孩子不写作业怎么办 幼儿园宝宝不写作业怎么办 幼儿园孩子不写作业怎么办 光盘数据面写字了怎么办 娃娃的手断了怎么办 联币金融跑路了怎么办 胃消化不了想吐怎么办 吃撑了恶心想吐怎么办 mac口红膏体晃动怎么办 excl图标和以前不一样了怎么办 冰箱显示板坏了怎么办 冰箱电脑显示屏坏了怎么办 冰箱的电子显示屏坏了怎么办 指导别人炒股亏损了怎么办 没有协议委托别人炒股亏损怎么办 炒股亏了很多钱崩溃了怎么办 帮人炒股亏了很多钱怎么办 破净买入继续跌怎么办 国画颜色上错了怎么办 宝宝5个月脸一直开裂怎么办 宝宝冻脸怎么办小妙招 3岁小儿长期便秘怎么办 脚裂了怎么办小妙招 宝宝脸风吹裂了怎么办 宝宝脸被风吹裂了怎么办 小宝贝的手有时候抖怎么办 打球把手戳肿了怎么办 阴茎上皮肤皴了怎么办 手皮肤干燥起皮怎么办 一到冬天手脚冰凉怎么办 脸上的皮肤被搓掉了怎么办 皮肤的表皮搓掉了怎么办 固体水彩经常掉出来怎么办 画水彩纸皱了怎么办 画完水彩纸皱了怎么办 旗袍后面隐形拉链气包怎么办 电动缝纫机不往前走怎么办 衬衣领子磨烂了怎么办 白寸衣领变黄怎么办 黑衣领衣服洗发黄怎么办 白毛衣用84变黄怎么办