1.非集成Spring

hibernate的检索方式,主要有以下五种。

1.导航对象图检索方式。(根据已经加载的对象,导航到其他对象。)

2.OID检索方式。(按照对象的OID来检索对象。)

3.HQL检索方式。(使用面向对象的HQL查询语言。)

4.QBC检索方式。(使用QBC(Qurey By Criteria) API来检索对象。)

5.本地SQL检索方式。(使用本地数据库的SQL查询语句。)

1、导航对象图检索方式

利用类与类之间的关系来检索对象。譬如我们要查找一份订单,就可以由订单对象自动导航找到订单所属的客户对象。当然,前提是必须在对象-关系映射文件上配置了它们的多对一的关系。

Order  order = (Order )session.get(Order.class,1);

Customer customer = order.getCustomer();

2、OID检索方式

主要指用Session的get()和load()方法加载某条记录对应的对象。

Customer  customer = (Customer )session.get(Customer.class,1);

Customer  customer = (Customer )session.load(Customer.class,1);

3、HQL检索方式

HQL(Hibernate Query Language)是面向对象的查询语言,它和SQL查询语言有些相似。在Hibernate提供的各种检索方式中,HQL是使用最广的一种检索方式。它具有以下功能:

在查询语句中设定各种查询条件。

支持投影查询,即仅检索出对象的部分属性。

支持分页查询。

支持分组查询,允许使用group by和having关键字。

提供内置聚集函数,如sum()、min()和max()。

能够调用用户定义的SQL函数。

支持子查询,即嵌套查询。

支持动态绑定参数。

Session类的Qurey接口支持HQL检索方式,它提供了以上列出的各种查询功能。

注:Qurey接口支持方法链编程风格,它的set方法都返回自身实例,而不是返回void类型。方法链编程风格能使程序代码更加简洁。

示例代码:

 Query query = session.createQuery("from Customer as c where " +"c.name=:customerName and c.age=:customerAge");     
// 动态绑定参数   
  query.setString("customerName", "Test");    
  query.setInteger("customerAge", 21);     
// 执行检索     
 List result = query.list();      
// 方法链编程风格     
 List result1 = session.createQuery( "from Customer as c where c.name=:customerName and c.age=:customerAge").setString( "customerName", "Test").setInteger("customerAge", 21) .list();

4、QBC(Qurey By Criteria)检索方式

采用HQL检索方式时,在应用程序中需要定义基于字符串形式的HQL查询语句。QBC API提供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和Expression类组成,它支持在运行时动态生成查询语句。

示例代码:

Criteria criteria = session.createCriteria(Customer.class);
Criterion criterion1 = Expression.like("namr", "T%");
Criterion criterion2 = Expression.eq("age", new Integer(21));
criteria = criteria.add(criterion1);
criteria = criteria.add(criterion2);
// 执行检索 List result = criteria.list();
// 方法链编程风格 List result1 = session.createCriteria(Customer.class).add(Expression.like("namr""T%")).add(Expression.
eq("age", new Integer(21))).list();
Hibernate还提供了QBE(Qurey By Example)检索方式,它是QBC的子功能。QBE允许先创建一个随想模板,然后检索出和这个样板相同的对象。
示例代码:
Customer exampleCustomer=new Customer();
exampleCustomer.setAge(21);
List result1 = session.createCriteria(Customer.class).add( Example.create(exampleCustomer)).list();

QBE的功能不是特别强大,仅在某些场合下有用。一个典型的使用场合就是在查询窗口中让用户输入一系列的查询条件,然后返回匹配的对象。QBE方式目前只能支持对象属性字段的等于查询和字符串的模糊匹配,不能支持区间,或者,大于等操作。在这些情况下,还是采用HQL检索方式或QBC检索方式。

5、本地SQL检索方式

采用HQL或QBC检索方式时,Hibernate生成标准的SQL查询语句,使用于所有的数据库平台,因此这两种检索方式都是跨平台的。有的应用程序可能需要根据底层数据库的SQL方言,来生成一些特殊的查询语句。在这种情况下,可以利用Hibernate提供的SQL检索方式。

示例代码:

Query query = session.createSQLQuery("select {c.*} from CUSTOMER as c where c.NAME like :customerName and c.AGE=:customerAge");
// 动态绑定参数
query.setString("customerName", "Test");
query.setInteger("customerAge", 21);
// 执行检索
List result = query.list();

以上我们看到了五种检索方式的应用,在实际项目中用的最广泛的还是HQL和QBC。

Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)的更多相关文章

  1. MyBatis实现模糊查询的几种方式

    在学习MyBatis过程中想实现模糊查询,可惜失败了.后来上百度上查了一下,算是解决了.记录一下MyBatis实现模糊查询的几种方式. 数据库表名为test_student,初始化了几条记录,如图: ...

  2. Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

    HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...

  3. Hibernate的条件查询的几种方式+查询所有的记录

    条件查询 . 第一种,用?占位符,如: //登录(用?占位符) public List<UserPO> LoginUser(UserPO up)throws Exception{ Sess ...

  4. Android之——ContentResolver查询的三种方式

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47785491 今天做到一个小项目.查询手机中短信的信息,当然得去系统暴露出来的数据 ...

  5. SpringBoot集成Mybatis实现多表查询的两种方式(基于xml)

     下面将在用户和账户进行一对一查询的基础上进行介绍SpringBoot集成Mybatis实现多表查询的基于xml的两种方式.   首先我们先创建两个数据库表,分别是user用户表和account账户表 ...

  6. 五 Mybatis一对一关联查询的两种方式(基于resultType&基于resultMap)

    关联查询: 一个用户对应多个订单,一个订单只有一个用户 订单关联用户:两种方式 一:基于resultTYpe,一个与表关系一样的pojo实现 主表订单,从表用户 首先要有一个与关联查询表关系一样的po ...

  7. spring引用hibernate映射文件的四种方式

    1.mappingResources 2.mappingLocations 3.mappingDirectoryLocations 4.mappingJarLocations 四种方式:https:/ ...

  8. ios学习网络------4 UIWebView以三种方式中的本地数据

    UIWebView这是IOS内置的浏览器.能够浏览网页,打开文档  html/htm  pdf   docx  txt等待格文档类型. safari浏览器是通过UIWebView制作. server将 ...

  9. 红帽6.9搭建yum源的2种方式(HTTP和本地)

    方式一:HTTP搭建 1.首先删除本身所带的yum `rpm -qa | grep yum | xargs rpm -e --nodeps ` #忽略依赖关系,强行删除 若出现   错误出现 将后面的 ...

随机推荐

  1. hdu2078

    刚开始看这题,感觉是DP什么的 ,后来我发现,只要找到中最小值,就可以啦,哈哈.假如用x1把0-100分割. 则0-x1-100  ===>   x1^2+(100-x1)^2 跟0-100   ...

  2. 使用SE16N_INTERFACE

    调用函数直接修改table数据             在PRD上通常没有权限 但是可以激活sap内置的修改模式     SE16N 修改表数据.增加.删除行项目: 1. Execute tcode ...

  3. .NET常用类库知识总结

    常用类库之.NET中的字符串 字符串的特性 1.不可变性        由于字符串是不可变的的,每次修改字符串,都是创建了一个单独字符串副本(拷贝了一个字符串副本).之所以发生改变只是因为指向了一块新 ...

  4. C puzzles详解【38-45题】

    第三十八题 What is the bug in the following program? #include <stdlib.h> #include <stdio.h> # ...

  5. s3c6410_u-boot-2010.03移植

    开发环境: 开发板 FriendlyARM Tiny6410 主机 CentOS release 6.4 (Final) 参考: http://www.cnblogs.com/plinx/archiv ...

  6. c#中$.ajax的使用

      <script type="text/javascript">  var telphone = { type: "getphone", &quo ...

  7. vue中的重要特性

    一.vue中的自定义组件 html的代码: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  8. Silverlight Color的颜色值

    1.MainPage.xaml <UserControl xmlns:SysManage="clr-namespace:Application" x:Class=" ...

  9. MongoDB(1):常用操作命令大全

    MongoDB常用操作命令大全(转) http://www.jb51.net/article/48217.htm 成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操 ...

  10. PHP系统函数

    (一)字符串处理函数 Chr函数 作用:根据ASCII码返回相应的字符. 语法:string chr(int ascii): Chop函数 作用:去除字符串中连续空格和空白行. 语法:string c ...