导读

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. PHP(一)OOP基础

    [面向过程&面向对象] 1.面向过程:专注于解决一件事情的过程.最大的特点,是有一个个函数来实现功能需求 2.面向对象:专注于有哪一个对象来实现这个功能,最大的特点,时产生一个个具有属性和方法 ...

  2. AngularJS学习篇(十一)

    AngularJS 表格 ng-repeat 指令可以完美的显示表格. <!DOCTYPE html> <html> <head> <meta charset ...

  3. HTML5 input事件检测输入框变化[转载]

    原文:http://www.linuxidc.com/Linux/2015-07/119984.htm 之前一直用change事件来监听输入框内容是否发生变化,只有当输入框失去焦点时才会触发,没想到h ...

  4. Ajax comet XMLHttpRequest 异步

    function createXHR() { if (typeof XMLHttpRequest != “undefi ned”){      return new XMLHttpRequest(); ...

  5. WebService--axis

    axis WebService虽然现在已经很少使用,但是还是把它的配置过程写出来,开发环境jdk 1.6 服务端: 1,导入需要jar包,自行下载 2,创建WebService接口 public in ...

  6. HTTPS 建立连接的详细过程

    HTTPS是在HTTP的基础上和ssl/tls证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能.很好的解决了解决了http的三个缺点(被监听.被篡改.被伪装) 对称加密和非对称 ...

  7. C# 链接MySql数据库

    C# 链接MySql数据库只得注意的几点: 1.C#链接MySql数据库要在网上下载一个mysql-connector-net-6.0.4-noinstall.rar  这里面放的都是一堆dll .将 ...

  8. 从事务角度粗窥架构的可扩展性和可维护性:内容整理自java web轻量级开发面试教程

    大家多少了解过架构,也听说过使用架构后,代码和可维护性和重用性能大大提升.这里我们来通过一些关于事务的实例,来感性地体会下架构带来的在可维护性方面的便利.本文来是从 java web轻量级开发面试教程 ...

  9. [转载] PHP工作模型与运行机制

    转载自http://www.nowamagic.net/librarys/veda/detail/350 PHP的工作模型非常特殊.从某种程度上说,PHP和ASP.ASP.NET.JSP/Servle ...

  10. [转载] Dubbo实现RPC调用使用入门

    转载自http://shiyanjun.cn/archives/341.html 使用Dubbo进行远程调用实现服务交互,它支持多种协议,如Hessian.HTTP.RMI.Memcached.Red ...