1.1Hibernate的检索方式
1.1.1Hibernate的检索方式:
检索方式:查询的方式:
导航对象图检索方式: 根据已经加载的对象导航到其他对象
* 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.2HQL:
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.3QBC:
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.4SQL:
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 是一个流行的 Java 持久层框架,它提供了多种检索数据的方式,包括导航对象图检索、OID 检索、HQL 检索、QBC 检索和本地 SQL 检索等。下面将详细介绍每种检索方式。 一、导航对象图检索 导航对象图检索...
Query By Criteria(QBC)是一种基于对象的查询方式,它允许开发者通过构建Criteria对象来描述查询条件,然后由Hibernate自动转换为相应的SQL语句执行。这种方式提供了比HQL(Hibernate Query Language)更灵活的...
HQL(Hibernate Query Language)和QBC(Query By Example)是Hibernate提供的两种主要的查询方式,它们提供了灵活且强大的查询能力。下面将详细阐述这两种查询方式以及它们的查询条件。 **HQL(Hibernate Query ...
以上介绍了Hibernate的五种检索方式:导航对象图检索、OID检索、HQL检索、QBC检索以及本地SQL检索。每种检索方式都有其独特的应用场景和特点。在实际开发过程中,根据项目的需求和技术背景选择合适的检索方式,可以...
一、Hibernate检索方式概述 Hibernate提供了多种检索数据的方法,以适应不同的需求场景。这些方法包括:HQL(Hibernate Query Language)、QBC(Query By Criteria)、Criteria API以及直接使用Session的get()和load...
- "2018-7-27-Hibernate-检索方式.pptx"可能涵盖了Hibernate的多种检索方式,如Query、Criteria、HQL等,以及它们的使用场景和优缺点。 - "04-2018-7-8-Hibernate-functiongtest.pptx"可能是关于函数测试和Hibernate...
### Hibernate检索方式详解 #### 一、概述 Hibernate是一个强大的对象关系映射(ORM)框架,它可以将Java对象与数据库表进行映射,使得开发者能够更方便地进行数据的持久化操作。在Hibernate中,提供了多种检索...
Hibernate提供了多种检索数据的方式,包括HQL(Hibernate Query Language)和QBC(Query By Example)。HQL是一种面向对象的查询语言,类似于SQL但更关注对象和类。QBC则是通过对象实例进行查询,更灵活。此外,还...
HQL是Hibernate官方推荐的检索数据的主要方式,因为它能够更好地体现对象模型的特性,如继承、多态和关联。 在学习HQL基础时,我们通常会用到一些示例数据。在这个例子中,我们有三个数据库表:`student`(学生表)...
17.1.2 QBC检索方式 17.1.3 本地SQL检索方式 17.1.4 关于本章范例程序 17.1.5 使用别名 17.1.6 多态查询 17.1.7 对查询结果排序 17.1.8 分页查询 17.1.9 检索单个对象(uniqueResult()方法) 17.1...
在讲解Hibernate检索方式之前,我们需要先了解Hibernate的基本概念。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用程序提供数据持久化服务。通过Hibernate,开发者可以使用Java对象来实现...
本人在厦门邦初培训时候 使用的快速入门精简文档 Session缓存的作用 Session清理缓存的时间点 对象的临时状态、持久状态和游离状态 用session的update()方法使游离对象转变为持久化对象。...本地SQL检索方式
8. **Hql与QBC检索** - Query By Criteria(QBC)是另一种ORM查询方式,通过API直接操作对象,如`Query query = session.createCriteria(User.class);` - QBC同样支持各种查询操作,如`list()`、`uniqueResult()`...
本教程将深入探讨Hibernate中的查询机制,包括HQL(Hibernate Query Language)和QBC(Query by Criteria)。通过实例代码和详细解释,我们将了解如何高效地在数据库中检索数据。 ### Hibernate查询语言(HQL) ...
内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射(1-n、1-1、n-n、继承映射)、检索策略、检索方式(对象导航图、OID 检索、HQL、QBC、本地SQL)、Hibernate 一\二级缓存、...
Hibernate提供了多种方式来查询数据,包括HQL、QBC和本地SQL。 - **HQL (Hibernate Query Language)**:一种面向对象的查询语言,类似于SQL但更加面向对象。 - **QBC (Query By Criteria)**:基于标准的API提供了一...
- QBC检索:基于Query By Criteria的检索方式,无需编写SQL语句。 - 本地SQL检索:直接使用原生SQL语句进行数据检索。 2. Hibernate中Java对象的状态主要有三种: - 临时状态(transient):对象存在于Java...
总结hibernate框架的常用检索方式 1、hibernate框架的检索方式有以下几种: OID检索:根据唯一标识OID检索数据 对象导航检索:根据某个对象导航查询与该对象关联的对象数据 HQL检索:通过query接口对象查询 QBC...
内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射(1-n、1-1、n-n、继承映射)、检索策略、检索方式(对象导航图、OID 检索、HQL、QBC、本地SQL)、Hibernate 一二级缓存、...
Hibernate提供了三种主要的查询方式:SQL、HQL(Hibernate Query Language)和QBC(Query by Criteria)。 1. SQL查询: Hibernate支持直接执行SQL语句,这使得开发者可以充分利用数据库的特性和性能。通过`...