Hibernate的查询分几种
HQL,QBC(QBE),SQL
HQL查询
HQL是基于面向对象的,里面没有表,也没有列,有类和属性
直接以from开头,表示全部选择
从Hibernate3.1可以执行修改和删除
from Emp
eg1. 带?参数查询
Session session = HibernateSessionFactory.getSession();
String hql="from Emp e where e.ename like ?";
Query query=session.createQuery(hql);
query.setString(0, "%"+"a"+"%");
List list=query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
eg.2 带:命名参数
Session session = HibernateSessionFactory.getSession();
String hql="from Emp e where e.ename like :name";
Query query=session.createQuery(hql);
query.setString("name", "%a%");
List list=query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
eg3.in查询
Session session = HibernateSessionFactory.getSession();
String hql="from Emp e where e.empno in (:list)";
Query query=session.createQuery(hql);
query.setParameterList("list", new Long[]{1L,3L,5L});
List list=query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
eg4.连接查询
Session session = HibernateSessionFactory.getSession();
String hql = "from Emp e where e.dept.dname like ?";
Query query = session.createQuery(hql);
query.setString(0, "%RE%");
List list = query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
eg5. 笛卡尔积
Session session = HibernateSessionFactory.getSession();
String hql = "select e from Emp e,Dept";
Query query = session.createQuery(hql);
List list = query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
eg6. 带条件
Session session = HibernateSessionFactory.getSession();
String hql = "select e from Emp e,Dept d where e.dept=d";
Query query = session.createQuery(hql);
List list = query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
eg7. select 多个对象,会形成 List里面放Object数组,数组里面放对象
Session session = HibernateSessionFactory.getSession();
String hql = "select e,d from Emp e,Dept d where e.dept=d";
Query query = session.createQuery(hql);
List list = query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
eg8. select 一列,就会形成这一列类型的集合,不会生成Object数组
Session session = HibernateSessionFactory.getSession();
String hql = "select e.empno from Emp e,Dept d where e.dept=d";
Query query = session.createQuery(hql);
List list = query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
eg9. select多个值,会形成Object[]
Session session = HibernateSessionFactory.getSession();
String hql = "select e.empno,e.ename from Emp e,Dept d where e.dept=d";
Query query = session.createQuery(hql);
List list = query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
eg10.查询生成List里面放HashMap,key由as后面的字符串决定
Session session = HibernateSessionFactory.getSession();
String hql = "select new map(e.empno as id,e.ename as name) from Emp e";
Query query = session.createQuery(hql);
List list = query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
eg11.迫切左连接查询
Session session = HibernateSessionFactory.getSession();
String hql = "from Emp e left join fetch e.dept";
Query query = session.createQuery(hql);
List list = query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
eg12.分页查询
Session session = HibernateSessionFactory.getSession();
String hql = "from Emp ";
Query query = session.createQuery(hql);
query.setFirstResult(10);//从第几条开始,初始是0 (page-1)*pageSize;
query.setMaxResults(5);//取几条
List list = query.list();
System.out.println(list.size());
HibernateSessionFactory.closeSession();
分享到:
相关推荐
无论哪种查询方式,最后都会返回一个结果列表,你可以遍历这个列表来获取并处理查询到的`username`字段的值。 总结,Hibernate提供多种方式查询数据表中的字段,包括HQL、Criteria API和DetachedCriteria,选择合适...
最后通过`createQuery`方法创建查询对象,并设置参数值,执行查询后返回结果列表。 #### 2. 使用Criteria API 除了HQL之外,Hibernate还提供了Criteria API来进行查询。Criteria API是一种类型安全的API,可以提供...
1. **Getter方法**:在枚举类型中定义一个`Getter`方法来返回自定义值。例如,如果枚举类型中有`MALE`、`FEMALE`两个值,那么可以定义一个`getKey()`方法来返回`"male"`和`"female"`。 2. **解析Getter方法**:在`...
- `EnumType.STRING`:将枚举实例的`name()`方法返回的字符串作为数据库中的文本值。这是更安全的方式,因为枚举实例的名称通常不会改变。 ```java @Entity public class User { @Enumerated(EnumType.STRING) ...
1. `Session.createSQLQuery(sql)`:创建一个SQL查询对象,然后可以通过addEntity(), addScalar()等方法来指定返回结果的映射。 2. `SessionFactory.openSession().createSQLQuery(sql).list()`:执行查询并获取...
- `Session`接口:执行SQL查询的主要入口点,它是Hibernate的核心接口,提供了打开、关闭连接,以及执行查询的方法。 - `SQLQuery`对象:通过`Session.createSQLQuery()`方法创建,用于执行自定义SQL查询。 - ...
原生SQL查询可以返回结果集、单个值或自定义的结果类型。但需要注意的是,这种方式可能会丢失一些Hibernate的自动转换和事务管理功能。 总结,Hibernate提供了多种查询方式以适应不同场景的需求。HQL适用于大多数...
`UserType`提供了对Java对象和数据库列之间转换的一系列方法,包括获取SQL类型的数组(`sqlTypes()`)、返回对象的Java类(`returnedClass()`)、比较两个对象的持久化相等性(`equals()`)、计算对象的哈希值(`...
属性查询允许我们选择特定的对象属性,例如`select fw.title, fw.date from TblFwxx fw`,将返回一个Object数组列表,每个元素包含指定属性的值。 **参数查询**是避免SQL注入风险的有效方法。在HQL中,可以使用预...
这篇博客"Hibernate SQLQuery 本地查询"可能详细讲解了如何利用Hibernate的SQLQuery类来执行SQL查询,以及如何在实际项目中结合BaseDaoSupport类实现数据访问。 首先,让我们理解SQLQuery的基本用法。在Hibernate中...
读取时,Hibernate会自动将数据库中的Clob对象返回,你可以通过调用Clob的`getSubString`或`getCharacterStream`方法来获取内容。 4.2.4 **删除(Delete)**: 删除操作与普通对象的删除相同,只需调用Session的`...
在此示例中,`getFullText()` 方法返回的是 CLOB 类型,而 `getFullCode()` 方法返回的是 BLOB 类型。 #### 八、列的定义 `@Column` 注解用于指定字段映射到数据库表中的哪一列,并可以指定列的各种属性,例如是否...
- 子查询可以返回单个值,也可以返回对象列表。 8. **参数化查询** - 使用问号(?)作为占位符,防止SQL注入攻击。 - 可以使用Query接口的setParameter()方法设置参数值。 9. **案例分析** - "HQL查询语言.doc...
在处理返回结果时,如果希望直接将查询结果转换为实体类对象,可以使用构造函数来指定返回的对象类型。例如,`select new 包名.类名(属性1,属性2……) from 实体类`,这需要在实体类中添加对应的带参构造方法,参数...
本文主要探讨 Hibernate 的查询体系,包括其核心特性 HQL(Hibernate Query Language),以及如何使用 HQL 进行高效的数据查询。 #### 二、HQL 查询简介 HQL 是 Hibernate 提供的一种面向对象的查询语言,它的语法...
HQL支持多种查询类型,包括但不限于:`from`子句、`select`子句、统计函数查询以及`where`子句。接下来将详细介绍这些查询方式的具体用法。 #### 三、`from`子句 `from`子句是最基础的HQL查询方式,用于获取特定类...
此外,还有一个"fetch"连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用,对于关联和集合来说,它有效的代替了映射文件中的...
6. **投影(Projection)**:不同于传统的返回完整实体,Projection允许我们只获取查询结果的一部分,比如特定字段的值或者计算结果。 7. **动态实体(Dynamic Instantiation)**:在某些情况下,我们可能不知道...
Hibernate 查询语言(HQL)语法参考 HQL(Hibernate Query Language)是 Hibernate 框架中的一种强大的查询语言,它类似于 SQL 语句,但是它是完全面向对象的查询语言,可以理解继承、多态和关联等概念。 大小写...
在Hibernate中,如果Clob字段的值是字符串,可以通过将Clob字段映射为String类型,让Hibernate自动处理转换。这种方式简单易用,但可能不适合非常大的文本,因为可能会导致内存溢出。 3.3 直接使用Clob类型: 对于...