在Hibaernate中提供了丰富的检索(查询)方式,因为项目中涉及到查询特别是复杂查询的时候基本上用的都市iBatis,所以一直都没怎么用Hibaernate自带的查询方法。总的说来Hibernate有如下集中查询方式:

1.根据OID检索某条指定的记录,典型方法如session.load()和session.get();

2.HQL检索方式。HQL是Hibernate Query Language的所写,形式类似SQL语句,只

不过它是面向对象的,从某种程度上而言,你可以说HQL是面向对象的查询语句,而SQL是面向关系的查询语句。使用这种检索方式的典型方法是session.createQuery(String hql),在Hibernate2.0中还有一个session.find方法也是采用的这种检索方式,不过已淘汰了;

3.QBC检索方式。使用Criteria接口的API来检索对象。它封装了基于字符串形式的查询语句,提供了更加面向对象的接口。

4.原生SQL检索。使用本地数据库的SQL查询语句。Hibernate会负责把检索到的JDBC ResultSet结果集映射为持久化对象图。典型方法如session.createSQLQuery(String sql);

第一种检索方式使用的已经很普遍了,而且也十分简单,下面主要看后三种检索方式。

一.HQL检索方式

代码片段如下:

…………………………………………………………………………………………

Query query=session.createQuery(“from Customer as c where c.name=:name”);

query.setString(“name”,”CMTobby”);

List result=query.list();

…………………………………………………………………………………………

一个典型的HQL检索可以分为3个步骤:

1.创建一个Query类型的对象,它包含一个HQL语句;如上面红底的代码,注意from后面跟的是类名而不是表名;

2.动态绑定参数(如果使用了动态参数的话)。动态绑定参数有两种方式:命名参数绑定和位置参数绑定。上例中采用的命名参数绑定,形式是“冒号:参数名”。还有一种位置参数绑定,如下:

Query query=session.createQuery(“from Customer as c where c.name=?”);

query.setString(0,”CMTobby”);

这个方式同JDBC中的预编译方式相似。当同时使用命名参数和位置参数时,位置参数必须出现在命名参数之前,否则运行出错。如下面的代码:

Query query=session.createQuery(“from Customer as c where c.name=:name and c.sex=?”);

query.setString(0,”F”);

query.setString(“name”,”CMTobby”);

运行时会报错:cannot define positional parameter after any named parameters have been defined

3.调用list()方法执行查询语句。

二.QBC检索方式

代码片段如下:

…………………………………………………………………………………………

Criteria criteria=session.createCriteria(Customer.class);

Criterion criterion1=Expression.eq("sex", "F");

Criterion criterion2=Expression.like("name", "%sb1%");

criteria.add(criterion1);

criteria.add(criterion2);

Result list= criteria.list();

…………………………………………………………………………………………

一个典型的QBC可以分为如下几个步骤:

1.创建一个Criteria类型的对象。上面的红色代码所示。这里我们可以看出QBC是面向对象的,并且显然不支持多表的联合查询,因为它是针对某个持久化类进行的。

2.指定查询条件,如上面的绿色代码所示。每一个Criterion类型的对象代表一个查询条件,把所有的Criterion类型对象增加到Criteria中,Criteria可以看成是一个Criterion的集合,在英文中Criteria就是Criterion的复数形式,因此了解点e文对于我们理解程序还是有帮助的,^_^。指定查询条件我们使用的是Expression类,它继承自Restrictions类,它里面定义了很多设定查询条件的方法,详细情况可以看它的API文档。

3.调用list()方法执行查询语句。

三.使用原生SQL检索(Native SQL)

一个典型的代码如下所示:

…………………………………………………………………………………………

Query query=session.createSQLQuery(“selct * from CUSTOMORS where name=:name”);

query.setString(“name”,”CMTobby”);

List result=query.list();

…………………………………………………………………………………………

这种检索方式和HQL检索方式非常类似,只不过查询语句的风格不同而已,就不详细说明了。

转载于:https://blog.51cto.com/2402766/617211

Hibernate学习(八):检索方式相关推荐

  1. #hibernate中的检索方式

    hibernate中的检索方式 HQL(*) hibernate query language 代码块 package cn.feicui.hql; import java.util.List; im ...

  2. Hibernate学习(八)———— Hibernate检索策略(类级别,关联级别,批量检索)详解...

    序言 很多看起来很难的东西其实并不难,关键是看自己是否花费了时间和精力去看,如果一个东西你能看得懂,同样的,别人也能看得懂,体现不出和别人的差距,所以当你觉得自己看了很多书或者学了很多东西的时候,你要 ...

  3. Hibernate入门6.Hibernate检索方式

    Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...

  4. Hibernate之检索方式

    时间:2017-1-22 16:09 --检索方式 Hibernate中提供了以下几种检索对象的方式:     *   导航对象图检索方式         根据已经加载额对象导航到其他对象.      ...

  5. hibernate QBC检索方式查询

    Hibernate提供了一套符合Java编程习惯的API,即QBC(Query By Creteria)检索方式, 主要邮Criteria接口,Criterion接口和Expression类组成.优点 ...

  6. HIbernate的检索方式

    导航对象图检索方式 根据已经加载的对象,导航到其他对象 OID检索方式 按照对象的OID来检索对象 依赖Session接口 主要是load()/get()的用法 HQL检索方式 Hibernate Q ...

  7. hibernate教程--检索方式详解(hql,sql,QBC)

    1.1 Hibernate的检索方式 1.1.1 Hibernate的检索方式: 检索方式:查询的方式: 导航对象图检索方式:  根据已经加载的对象导航到其他对象 * Customer custome ...

  8. hibernate教程--检索方式(hql,sql,QBC)

    1.1Hibernate的检索方式 1.1.1Hibernate的检索方式: 检索方式:查询的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 * Customer customer = ...

  9. Hibernate之HQL检索(查询)方式

    HQL(Hibernate Query Language)是面向对象的查询语言,与SQL非常相似.在Hibernate中,HQL是使用最广泛的检索方式. 具有下面经常使用功能: (1)在查询语句中,能 ...

  10. (转) Hibernate检索方式概述

    http://blog.csdn.net/yerenyuan_pku/article/details/70554816 Hibernate检索方式概述 我们在对数据库的操作中,最常用的是select, ...

最新文章

  1. 12/12 day06
  2. android日志收集存入mysql_rsyslog+analyzer+mysql实现日志收集展示
  3. NYOJ 309 BOBSLEDDING(dp)
  4. Linux Matlab服务器进一步改造成Application Server(应用程序服务器)
  5. 图网络笔记-知识补充与node2vec代码注解
  6. 世界上最贵的车是直通车吗?
  7. Linux环境中MySQL主从同步--添加新的从库
  8. ButterKnife 8.6.0 使用
  9. highchart图表drilldown钻取功能及event点击事件添加(1)
  10. 机器学习流程是什么?简述机器学习流程!
  11. excel提取html字段文字,excel提取字符串中的特定字符串
  12. input输入框只能输入11位数字
  13. colormap保存 matlab_matlab的colormap的保存
  14. 3D数学基础——欧拉角与万向节死锁
  15. 业务流程监控的几点建议
  16. 中国嵌入式打印机市场趋势报告、技术动态创新及市场预测
  17. 电脑加装内存条的教程
  18. 安装语言包(LANGUAGE PACKAGE)
  19. 沉浸式夜游的发展应充分挖掘文化内涵
  20. 电路分析基础笔记(四)动态电路的时域分析

热门文章

  1. 2015-11-30 20:59:08之自力更生
  2. 【ML小结1】ML入门
  3. mirdeep2使用笔记
  4. 直接插入排序和冒泡排序有什么区别 直接插入排序和冒泡排序有哪些不同
  5. 关于log4j的配置
  6. 开发中常用正则表达式
  7. W,b的初始化和几种激活函数
  8. 黑马程序猿 IO流 ByteArrayInputStream与ByteArrayOutputStream
  9. Openstack Nova network
  10. Windows Phone开发(25):启动器与选择器之WebBrowserTask 转:http://blog.csdn.net/tcjiaan/article/details/7404770...