1.1 Hibernate的检索方式

1.1.1 Hibernate的检索方式:

检索方式:查询的方式:

导航对象图检索方式:  根据已经加载的对象导航到其他对象

* 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”);

1.1.2 HQL:

HQL:Hibernate Query Language:

* 特点:

* 面向对象的查询:

* 支持方法链编程:

* 使用:

1.查询所有记录:

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

2.查询使用别名:

// 使用别名// 别名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);

3.排序:

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

4.分页查询:

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);}

5.单个对象查询:

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

6.参数绑定:

// 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);}

7.投影操作:

// 查询客户的名称:/** 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);

8.模糊查询:

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

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.字段;

HQL多表的查询:

* 连接:

* 交叉连接:

* 内连接:

* 隐式内连接:

* 迫切内连接:

* 左外连接:

* 迫切左外连接:

* 右外连接:

* HQL的内连接和迫切内连接区别:

* 内连接查询 :将数据封装一个List<Object[]>中.

* 迫切内连接 :将数据封装一个List<Customer>中.但是迫切内连接,得到会有重复记录 ,需要使用distinct排重.

1.1.3 QBC:

1.查询所有记录:

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

2.排序:

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

3.分页:

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);}

4.获取单个对象:

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

5.带参数的查询:

/** 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);

6.模糊查询:

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

1.1.4 SQL:

1.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教程--检索方式详解(hql,sql,QBC)相关推荐

  1. hibernate(七) hibernate中查询方式详解

    序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...

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

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

  3. hibernate教程--二级缓存详解

    Hibernate的二级缓存 一.缓存概述 缓存(Cache): 计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储 ...

  4. hibernate教程--一级缓存详解

    1.1 Hibernate的一级缓存 1.1.1 Hibernate的一级缓存: 什么是缓存: 缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获 ...

  5. JAVAWEB开发之Hibernate详解(三)——Hibernate的检索方式、抓取策略以及利用二级缓存进行优化、解决数据库事务并发问题

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

  6. Hibernate中的QBC查询方式详解

    Hibernate中的QBC查询方式详解 QBC:Query By Criteria,条件查询. 是一种更加面向对象化的查询的方式. 1.QBC简单查询 测试代码: package com.pipi. ...

  7. 【python教程入门学习】Python函数定义及传参方式详解(4种)

    这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...

  8. Hibernate之检索方式

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

  9. HIbernate的检索方式

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

最新文章

  1. Android使用ActivityGroup设置android:windowSoftInputMode失效的问题
  2. 【HDU - 6290】 奢侈的旅行 (对题目预处理 + DIjkstra最短路)
  3. html文本改,编辑html格式文本可改成txt格式(可以替换或更换某文本)新手
  4. 开放计算中国社区技术峰会举行,开放开源加速产业创新
  5. mac下安装编译ffmepg方法
  6. linux系统编程之进程(二):进程生命周期与PCB(进程控制块)
  7. ListView优化问题
  8. 情人节单身的你,是否用一张智能名片,进行表白
  9. 模仿的网易和钱钱钱的腾讯
  10. 美国Zip code大全
  11. 设计模式 模版方法模式 展现程序员的一天
  12. 【计算机网络】数据链路层:使用广播信道的以太网(1)
  13. 这后台管理系统,有逼格!(附源码)
  14. CnOpenData中国各省份官方报纸数据
  15. 杂文(1):Java对象引用详解
  16. 高等代数_第3章线性方程组的解集的结构
  17. 杀手级抓包软件wireshark入门
  18. Hbase备份与恢复工具Snapshot的基本概念与工作原理
  19. 小程序的服务器费用谁出,小程序服务器费用一年多少
  20. MySQL数据库(二):常用SQL函数(处理不同类型数据转换场景)

热门文章

  1. 加入收藏 lsk的BLOG
  2. ESP32 官方文档(三)分区表
  3. 图形基础 GPU架构(5)GPU vs CPU
  4. C++ Primer 5th笔记(chap 18 大型程序工具)构造函数与虚继承
  5. C++(六)——继承
  6. 【Python小程序】这竟是2月14号情人节表白神器、成功率100%?(进来康康)
  7. [问答]-EL1t和EL1h中的后缀t和h分别是什么意思
  8. [How TO]-openjrok维护手册
  9. HTTP与HTTPS——密码学笔记(九)
  10. 设定printf在终端输出的颜色