导读

Hibernate进阶篇分为上中下三篇,本文为最后一篇,主要内容是Hibernate框架的查询,主要包括hql语句查询,criteria查询以及查询策略的选择。

知识框架

Hibernate查询
一、查询方式:hql语言、criteria接口和sql语言。
hql语言和criteria都是面向对象的查询方式,但最终都是要转换为sql语言执行的。
1、hql语言
1)简单查询
2)条件查询
3)排序查询
4)分页查询
5)统计查询
6)投影查询
2、criteria
1)简单查询
2)条件查询
3)排序查询
4)分页查询
5)统计查询
6)离线查询
二、查询策略
Hibernate查询策略主要是查询是两方面的选择:1、是否延迟加载sql查询语句;2、选择何种查询:单表、多表还是子查询。
1、类级别查询策略
类级别延迟加载
2、关联级别查询策略(了解)
三、扩展:多表查询
1、交叉连接
2、内连接
3、外连接

一、查询方式

Hibernate支持三种查询方式:HQL(Hibernate Query Language)、Criteria接口和SQL。其中HQL和Criteria都是面向对象的查询,但最终都要装换为sql查询语句才执行。

1、HQL

为了方便说明,假设有表person和对应的实体类Person,且放于包domain下。

1)简单查询

sql语句:select * from person

hql语句:select * from domain.Person

注:select * 可以省略;如果整个项目下只有一个Person类,那么包名domain也可以省略。  

2)条件查询

sql语句:select * from person where pid = ?

sql设置占位符:PreparedStatement.setInt(0,pid);

(方式1)

hql语句:select * from domain.Person where pid = ?

hql设置占位符:session.setParameter(0,pid);

(方式2)

hql语句:select * from domain.Person where pid = :myPid

hql设置占位符:session.setParameter("myPid",pid);

3)排序查询

升序

sql语句:select * from person order by age asc

hql语句:select * from domain.Person order by age asc

降序

sql语句:select * from person order by age desc

hql语句:select * from domain.Person order by age desc

4)分页查询

sql语句:select * from person limit ?,?

hql语句:select * from domain.Person limit ?,?

hql分页占位符:session.setFirstResult(first);

        session.setMaxResults(max);

注:first代表分页的第一条数据,max代表分页的总条数。

5)统计查询

sql语句:select count(*)  from person

hql语句:select count(*)  from domain.Person

注:常用的聚合函数包括: count(字段)、 sum(字段)、 avg(字段)、 min(字段)、 max(字段)。

6)投影查询

投影查询其实就是查询需要的字段或字段组合。如只查询person表的age字段

sql语句:select age from person

hql语句:select age  from domain.Person

2、Criteria

criteria接口时完全面向对象的查询方式,不再像hql一样还需要书写语句,而是完全地通过调用方法来进行查询操作。

常用对象:

1)Criteria接口

2)查询执行对象Restrictions对象。提供了很多静态方法以供查询使用:

1)简单查询

 //获得criteria
Criteria criteria = session.createCriteria(Person.class);
//获得结果集
List<Person> list = criteria.list();

2)条件查询

 //获得criteria
Criteria criteria = session.createCriteria(Person.class); //添加查询条件
SimpleExpression eq = Restrictions.eq("name", "张三");
criteria.add(eq);//查询name="张三"的记录 //获得结果集
List<Person> list = criteria.list();

相关的查询方法看上文的表格。

3)排序查询

 //获得criteria
Criteria criteria = session.createCriteria(Person.class); //添加排序条件
Order asc = Order.asc("age");//按年龄升序排序
criteria.addOrder(asc); //获得结果集
List<Person> list = criteria.list();

4)分页查询

 //获得criteria
Criteria criteria = session.createCriteria(Person.class); //添加分页条件
criteria.setFirstResult(0);
criteria.setMaxResults(5); //获得结果集
List<Person> list = criteria.list();

5)统计查询

 //获得criteria
Criteria criteria = session.createCriteria(Person.class); //添加统计条件
criteria.setProjection(Projections.rowCount());//查询总记录数 //获得结果
Long count = (Long)criteria.uniqueResult();

6)离线查询

我们上面使用的criteria对象是由session创建的,所以要使用criteria对象必须先有session对象。但是DetachedCriteria对象(离线条件查询对象)可以直接创建而不通过session,且也能调用上面的查询语句,唯一不同之处在于DetachedCriteria是没有与session对象绑定的,所以称为离线查询对象。

DetachedCriteria对象的出现主要是运用在java的三层架构上,比如当web层需要传递很多参数作为查询条件时,将参数传到service层再传给dao层是十分麻烦的。我们可以在web直接使用DetachedCriteria离线查询,然后只传递这个对象给dao层即可。

需要注意的两个api:

DetachedCriteria对象的创建:

DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Person.class);

DetachedCriteria对象与session绑定:(离线查询绑定之后就能持久化到数据库了)

detachedCriteria.getExecutableCriteria(session);

二、查询策略

Hibernate查询策略主要是查询是两方面的选择:1、是否延迟加载sql查询语句;2、选择何种查询:单表、多表还是子查询。

1、类级别查询策略

类级别查询策略主要是延迟加载策略,延迟加载就是当session从数据库加载对象是先不调用sql查询语句,直到该对象使用时再加载。延迟加载最大化地优化了查询,及不使用就不必执行查询了。

如何使用:1)在配置文件中的class元素中配置属性:lazy=true(false表示不延迟加载)。当然,默认就是true,所以如果使用延迟加载就忽略这个配置。

     2)使用upload()方法代替get()方法读取对象。(get方法不支持延迟加载策略)

问题:延迟加载是在对象与session绑定是才生效,所以一旦session.close之后再操作对象就会发生异常。

2、关联级别查询策略

关联级别即多表关系中,在关联属性下的属性配置:

其实关联级别的默认属性就是性能最优状态了,感兴趣的可以手动配置上面的信息进行性能比较。

问题:但是要注意的一个问题就是上面说到的延迟加载问题,一旦session关闭就不能再获取加载的对象了,这个问题主要发生在Java三层架构中,当页面需要获得数据库的某条记录时,我们使用到了延迟加载,而当返回页面时显然session对象已经关闭,这是页面就无法获得该对象(该记录)。如何保证在页面使用到该对象时session处于绑定(未关闭)状态呢?

解决:使用filter过滤器可以扩展session的作用范围:即在filter初始化时就打开session,然后放行,在页面加载结束后再关闭session即可。

三、扩展:多表查询

多表查询分为:交叉连接(笛卡尔积);内连接;外连接。

1、交叉连接

即两个表笛卡尔积组合表,一般我们避免使用。

2、内连接

1)隐示内连接

sql语句:select * from A a,B b where b.aid = a.id

2)显示内连接

sql语句:select * from A a inner join B b on b.aid = a.id

3、外连接

1)左外连接

sql语句:select * from A a left [outer] join B on b.aid=a.id;

2)右外连接

sql语句:select * from A a right [outer] join B on b.aid=a.id;

(这里的outer可以省略)

看图:

aaarticlea/png;base64,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" alt="" />

HIbernate框架的进阶内容就总结到这里,大吉大利,今晚吃鸡!

Hibernate框架进阶(下篇)之查询的更多相关文章

  1. Hibernate框架进阶(上篇)

    导读 前面一片文章介绍了Hibernate框架的入门,主要是讲解Hibernate的环境搭建和简单测试,有兴趣的童鞋出门左转.本文在入门的基础上进行Hibernate的进阶讲解,分为上中下三篇,本篇为 ...

  2. Hibernate框架进阶(中篇)之多表关系

    导读 Hibernate进阶主要分为上中下三篇,本文是中篇,主要讲解Hibernate框架中多表关系的实现.我们知道多表关系有一对一.一对多(多对一)和多对多三种关系.而1对1关系一般合并为一个表处理 ...

  3. hibernate框架学习之数据查询(QBC)helloworld

    package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Criteria; import org.hib ...

  4. hibernate框架学习之数据查询(QBC)

    lQBC(Query By Criteria)是一种Hibernate中使用面向对象的格式进行查询的计数 lQBC查询方式步骤 •获取Session对象 •初始化Criteria对象(使用Sessio ...

  5. hibernate框架学习之数据查询(HQL)helloworld

    package cn.itcast.h3.hql; import java.util.List; import org.hibernate.Query; import org.hibernate.Se ...

  6. hibernate框架学习之数据查询(HQL)

    lHibernate共提供5种查询方式 •OID数据查询方式 •HQL数据查询方式 •QBC数据查询方式 •本地SQL查询方式 •OGN数据查询方式 OID数据查询方式 l前提:已经获取到了对象的OI ...

  7. hibernate框架学习之数据查询(本地SQL)

    本地SQL查询方式 lHibernate框架支持使用原生态SQL语句进行操作数据库 l查询对象SQLQuery由Session获取 •SQLQuery sq = s.createSQLQuery(&q ...

  8. Hibernate框架学习(五)——批量查询(概述)

    一.HQL查询(Hibernate Query Language)多表查询,但不复杂时使用 Hibernate独家查询语言,属于面向对象的查询语言 1.基本查询 2.条件查询 注意:HQL语句中不可能 ...

  9. Hibernate框架之HQL查询与Criteria 查询的区别

    Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...

随机推荐

  1. session设置过期的方法(转载)

    这篇文章主要介绍了php中实现精确设置session过期时间的方法,需要的朋友可以参考下   大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设 ...

  2. HDU6127Hard challenge

    Hard challenge Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) ...

  3. node多版本管理--nvmw

    最近要搭建koa2+node环境,发现需要node较高版本,不然ES6.7中的语法使用不了.就像安装多个版本的node,发现了nvmw. 1.下载nvmw  https://github.com/ha ...

  4. shell命令输入输出重定向

    Linux命令的执行过程 首先是输入:stdin输入可以从键盘,也可以从文件得到 命令执行完成:把成功结果输出到屏幕,stout默认是屏幕 命令执行有错误:把错误也输出到屏幕上面,stderr默认也是 ...

  5. PHP静态化技术

    很多框架的模板引擎都有页面静态化的功能  目的是为了优化网站运行时间 静态化分两种  纯静态和伪静态 一. 纯静态 纯静态展示的是实实在在的静态页面 运行PHP程序 判断是否存在静态页 如果存在 展示 ...

  6. 解决autocad闪退

    1.进入注册表,regedit 2.找到ROOT\installer\Products ,找到以7D2F开头的键值,这里有两个都得删除 3.删除programdata目录下的AutoDesk目录,及f ...

  7. smm框架整合实现登录功能

    一.准备所需的jar包 1.1所需jar包 1.Spring框架jar包 2.Mybatis框架jar包 3.Spring的AOP事务jar包 4.Mybatis整合Spring中间件jar包 5.a ...

  8. SQL2012导出的脚本没有if exists判断

    SQL2012导出的脚本没有if exists判断 以前用SQL2000的时候,导出存储过程,表各种object的时候,前面会自动加if exists的一段脚本,这样的脚本很方便的可以重复执行.现在使 ...

  9. C#链接数据库增删改查的例子

    以users表为例,有三个字段,自增长的编号id,int类型:名称name,nvarchar类型,密码pwd,nvarchar类型首先在vs2005中引入using System.Data.SqlCl ...

  10. [转载] 基于Dubbo的Hessian协议实现远程调用

    转载自http://shiyanjun.cn/archives/349.html Dubbo基于Hessian实现了自己Hessian协议,可以直接通过配置的Dubbo内置的其他协议,在服务消费方进行 ...