一、概述

  • 检索方式:查询的方式
  • 导航对象图检索方式: 根据已经加载的对象导航到其他对象
    • Customer customer = (Customer)session.get(Customer.class,1);
    • customer.getOrders();// 获得到客户的订单
  • OID 检索方式: 按照对象的 OID 来检索对象
    • get()/load();方法进行检索.
  • HQL 检索方式: 使用面向对象的 HQL 查询语言
    • Query query = session.createQuery(“HQL”);
  • QBC 检索方式: 使用 QBC(Query By Criteria) API 来检索对象. 这种 API 封装了基于字符串形式的查询语句, 提供了更加面向对象的查询接口.
    • Criteria criteria = session.createCriteria(Customer.class);
  • 本地 SQL 检索方式: 使用本地数据库的 SQL 查询语句
    • SQLQuery query = session.createSQLQuery(“SQL”);

二、HQL

2.1 简介

  • HQL:Hibernate Query Language
  • 特点:
    • 面向对象的查询
    • 支持方法链编程
  • 使用:
    • 创建Query接口

2.2 查询所有记录

List<Customer> list = session.createQuery("from Customer").list();
for (Customer customer : list) {
System.out.println(customer);
}

2.3 查询使用别名

// 使用别名
// 别名as可以省略
/* List<Customer> list =
session.createQuery("from Customer c").list();
System.out.println(list);*/ // 使用别名:带参数
/*List<Customer> list = session
.createQuery("from Customer as c where c.cname = ?")
.setString(0, "小沈").list();
System.out.println(list);*/ // 不支持 select * from Customer写法.可以写成 select 别名 from Customer as 别名;
List<Customer> list = session.createQuery("select c from Customer c").list();
System.out.println(list);

2.4 排序

List<Customer> list = session.createQuery(
"from Customer c order by c.id desc").list();
for (Customer customer : list) {
System.out.println(customer);
}

2.5 分页查询

Query query = session.createQuery("from Order");
query.setFirstResult(20);
query.setMaxResults(10);
List<Order> list = query.list();
for (Order order : list) {
System.out.println(order);
}

2.6 单个对象查询

Customer customer = (Customer) session
.createQuery("from Customer where cname = ?")
.setString(0, "小明").uniqueResult();
System.out.println(customer);

2.7 参数绑定

// 1.使用?号方式绑定
/*Query query = session.createQuery("from Customer where cname = ?");
query.setString(0, "小沈");
List<Customer> list = query.list();
System.out.println(list);*/ /*Query query = session.createQuery("from Customer where cname = ? and cid =?");
query.setString(0, "小沈");
query.setInteger(1,3);
List<Customer> list = query.list();
System.out.println(list);*/ // 2.使用名称的方式绑定
Query query = session.createQuery("from Customer
where cname=:name and cid=:id");
query.setString("name", "小沈");
query.setInteger("id", 3);
List<Customer> list = query.list();
System.out.println(list); // 3.绑定实体
List<Order> list = session
.createQuery("from Order o where o.customer = ?")
.setEntity(0, customer).list();
for (Order order : list) {
System.out.println(order);
}

2.8 投影操作

// 查询客户的名称:
List<Object> list = session.createQuery(
"select c.cname from Customer c").list(); System.out.println(list); List<Object[]> list = session.createQuery(
"select c.cid,c.cname from Customer c").list();
for (Object[] objects : list){
System.out.println(Arrays.toString(objects));
} List<Customer> list = session.createQuery(
"select new Customer(cname) from Customer").list();
System.out.println(list);

2.9 模糊查询

Query query = session.createQuery("
from Customer where cname like ?");
query.setParameter(0, "小%");
List<Customer> list = query.list();
System.out.println(list);

2.10 SQL多表查询

  • 连接:
  • 交叉连接:
    • select * from A,B;
  • 内连接:查询的是两个表的交集!
    • select * from A inner join B on A.字段 = B.字段;
  • 隐式内连接:
    • select * from A,B where A.字段 = B.字段;
  • 外连接:
  • 左外连接:
    • select * from A left outer join B on A.字段 = B.字段;
  • 右外连接:
    • select * from A right outer join B on A.字段 = B.字段;

2.11 HQL多表的查询

  • 连接:
  • 交叉连接:
  • 内连接:
  • 隐式内连接:
  • 迫切内连接:
  • 左外连接:
  • 迫切左外连接:
  • 右外连接:
  • HQL的内连接和迫切内连接区别:
  • 内连接查询 :将数据封装一个List中.
  • 迫切内连接 :将数据封装一个List中.但是迫切内连接,得到会有重复记录 ,需要使用distinct排重.

三、QBC

3.1 简介

3.2 查询所有记录

List<Customer> list =session.createCriteria(Customer.class).list();
for (Customer customer : list) {
System.out.println(customer);
}

3.3 排序

List<Customer> list = session.createCriteria(Customer.class)
.addOrder(org.hibernate.criterion.Order.desc("id")).list();
for (Customer customer : list) {
System.out.println(customer);
}

3.4分页

Criteria criteria = session.createCriteria(Order.class);
criteria.setFirstResult(10);
criteria.setMaxResults(10);
List<Order> list = criteria.list();
for (Order order : list) {
System.out.println(order);
}

3.5获取单个对象

Customer customer = (Customer) session.createCriteria(Customer.class)
.add(Restrictions.eq("cname", "小明")).uniqueResult();
System.out.println(customer);

3.6 带参数的查询

/*
List<Customer> list = session.createCriteria(Customer.class)
.add(Restrictions.eq("cname", "小明")).list();
System.out.println(list);
*/ List<Customer> list = session.createCriteria(Customer.class)
.add(Restrictions.eq("cname", "小明"))
.add(Restrictions.eq("cid", 2)).list();
System.out.println(list);

3.7 模糊查询

Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.like("cname", "大%"));
List<Customer> list = criteria.list();
System.out.println(list);

四、SQL

4.1 简介

4.2 SQL语句查询所有记录

List<Object[]> list = session.createSQLQuery("select * from
customer").list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
} List<Customer> list = session.createSQLQuery("select * from
customer").addEntity(Customer.class).list();
for (Customer customer : list) {
System.out.println(customer);
}

【Hibernate】检索方式的更多相关文章

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

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

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

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

  3. hibernate检索方式(HQL 检索方式,QBC 检索方式,本地 SQL 检索方式)

    hibernate有五种检索方式,这儿用 单向的一对多的映射关系 例子,这儿有后三种的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 ...

  4. Hibernate 检索方式

    概述 •Hibernate 提供了以下几种检索对象的方式 –导航对象图检索方式:  根据已经加载的对象导航到其他对象 –OID 检索方式:  按照对象的 OID 来检索对象 –HQL 检索方式: 使用 ...

  5. [原创]java WEB学习笔记89:Hibernate学习之路-- -Hibernate检索方式(5种),HQL介绍,实现功能,实现步骤,

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. Hibernate检索方式 分类: SSH框架 2015-07-10 22:10 4人阅读 评论(0) 收藏

    我们在项目应用中对数据进行最多的操作就是查询,数据的查询在所有ORM框架中也占有极其重要的地位.那么,如何利用Hibernate查询数据呢?Hibernate为我们提供了多种数据查询的方式,又称为Hi ...

  7. Hibernate 检索方式之 HQL 检索方式

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

  8. Hibernate -- 检索方式 HQL

    Hibernate 提供了以下几种检索对象的方式 导航对象图检索方式:  根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的OID 来检索对象 HQL 检索方式:使用面向对象的HQL查询 ...

  9. Hibernate检索方式(转载)

    我们在项目应用中对数据进行最多的操作就是查询,数据的查询在所有ORM框架中也占有极其重要的地位. 那么,如何利用Hibernate查询数据呢?Hibernate为我们提供了多种数据查询的方式,又称为H ...

  10. 7.Hibernate 检索

    1.Hibernate检索方式 检索方式简介: 导航对象图检索方式:根据已经加载的对象,导航到其他对象.OID检索方式:按照对象的OID来检索对象.Session 的 get() 和 load() 方 ...

随机推荐

  1. 【419】C语言语句

    判断语句 C 语言提供了以下类型的判断语句.点击链接查看每个语句的细节. 语句 描述 if 语句 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成. if...else 语句 一个 if 语句 ...

  2. 123457123457#0#-----com.twoapp.FromPuzzle02--前拼后广--儿童农场拼图游戏jiemei

    com.twoapp.FromPuzzle02--前拼后广--儿童农场拼图游戏jiemei

  3. SQL Server 2008 R2如何使用正则表达式搜索

    正则表达式是简明而灵活的表示法,用于查找和替换各种模式的文本.在 SQL Server Management Studio 的“查找和替换”对话框中的“查找内容”字段中,可以使用一组特定的正则表达式. ...

  4. 接着上次的python爬虫,今天进阶一哈,局部解析爬取网页数据

    *解析网页数据的仓库 用Beatifulsoup基于lxml包lxml包基于html和xml的标记语言的解析包.可以去解析网页的内容,把我们想要的提取出来. 第一步.导入两个包,项目中必须包含beau ...

  5. 分享一个关于Opencv的小总结

    import cv2   #opencv读取的格式是BGR import numpy as np 一.#读入文件 img=cv2.imread('cat.jpg') #’’引号内是图片所在盘的地址+名 ...

  6. 关于一些初学Unity的基本操作和自己的理解

    1.Scene面板操作:  A.按住鼠标右键,拖动鼠标,可以旋转  B.鼠标滚轮前后滑动,前进后退  C.按下鼠标滚轮,拖动鼠标,可以拖动场景  D.在场景中选中物体,按F键或者在Hierarchy面 ...

  7. PC电脑端支付宝扫码付款出现编码错误提示原因

    给这家公司做各大场景的支付 涉及到微信内置H5支付 其他浏览器唤醒微信客户端支付 PC扫码支付 和支付宝相应的支付,但今天进行PC扫码支付时遇到一些编码问题,流程能走通. 调试错误,请回到请求来源地, ...

  8. S2. Android 常用控件

    [概述] Button(普通按钮):点击事件处理 Toast(消息提示) Menu(菜单): Menu + Fragment 实现菜单切换 [Button] 在 MainActivity 对应的布局文 ...

  9. Oracle的varchar2如何比较大小

    首先要说的是Oracle中字符类型的比较都是基于ASCII码表来实现的,我就简单做个总结. Oracle中varchar2类型的字符串使用的是非填充空格的标准来进行比较的(表格中右边的那列,注意空格的 ...

  10. 向前引用 ? float VS long ? 这些知识你懂吗?

    thinking in java 读书笔记(感悟): 作者:淮左白衣 : 写于 2018年4月2日18:14:15 目录 基本数据类型 float 和 long 谁更大 System.out.prin ...