七:Hibernate查询
query :查询
criteria :标准
restriction :约束条件
pagination :分页
exact :精确的
anywhere :无论何处
目标
7.1:Hibernate查询
7.1.1:为什么使用HQL
7.1.2:如何使用HQL
7.1.3:HQL的丰富功能
7.2:Criteria查询
7.2.1:为什么使用Criteria查询
7.2.2:如何使用Criteria查询
小结:
目标
Hibernate支持两种主要的查询方式:HQL(Hibernate Query Language,Hiberante查询语言)查询和Criteria(criteria ,n. 标准 )查询。HQL查询时一种面向对象的查询语言,其中没有表和字段的概念,只有类和属性的概念。Criteria查询又称为“对象查询”,用面向对象的方式将构造查询过程作了封装。
7.1:Hibernate查询
7.1.1:为什么使用HQL
JDBC查询方法:繁复的SQL语句,手动封装结果到对象并存放到集合中。代码繁复,易出错。
HQL是Hibernate提供的面向对象查询语言,不用编写繁复的SQL语句,查询结果是直接存放在List中的对象,并且,HQL是独立于数据库的,对不同的数据库根据Hibernate dialect(方言,土语)属性的配置自动生成不同的SQL语句。
7.1.2:如何使用HQL
使用HQL4步走:1,得到session;2,编写HQL语句;3,创建Query对象;4,执行查询得到结果。
示例:
Session session =super.getSession();//
String hql="from TblFwxx";
Query query=session.createQuery(hql);
List list=query.list();
在HQL语句中,from关键字不区分大小写,但后面跟的是类名而不是表名要区分大小写,可以只是类名也可以包含包名,可以没有select子句,可以给类名指定别名,as关键字可省。
(关键字,类名,子句,别名)
7.1.3:HQL的丰富功能
1,属性查询(单个,多个)
单个属性,多个属性的查询结果都保存在List中,只是:单个属性的时候,数据类型是属性的类型;多个的时候,每条数据保存在Object数组中。
2,参数查询
支持where子句,支持like关键字,支持"%"通配符。直接拼凑HQL语句容易带来安全隐患,可以使用"?"作占位符,命名参数定义参数。
"?"作占位符(参数少时使用):可以通过Query的setObject方法逐个设置参数的值,需保证每个占位符都设置了参数值,设置参数值时下标从0开始。缺点:代码可读性下降(须仔细比对才能知道哪个设置参数的语句对应到哪个占位符上,不易查找错误),参数的下标被硬编码参数顺序调整,代码也需跟着调整(不便)。
参数命名:以格式":参数名"定义,通过名称逐个设置参数的值(增强了程序的可读性和可维护性)
HQL支持的运算符:>,<,=,>=,<=,<>(不等于)和is null等运算符,支持and,or,not和括号,而且支持in和between。(运算符,is null,and ,or,not,(),in,between)。
3,关联查询
关联条件等式的两端都是对象,Hibernate通过两个对象主键值是否相等判断两个对象是否相等。
4,分页查询
通过Query.setFirstResult()和query.setMaxResults()设置从第几条数据开始,共返回几条数据。参数分别是(pageNumber-1)*pageSize和pageSize。
5,统计查询
通过count函数得到数据条数。Hibernate支持的函数有min(),max(),avg()。当查询的结果只有一条数据时,可以通过query.uniqueResult()方法直接或得结果。例如:int count=(Integer)query.uniqueResult()。
7.2:Criteria查询
7.2.1:为什么使用Criteria查询
Criteria查询(对象查询)采用面向对象的方式(主要是Criteria对象)封装查询条件,并提供Restrictions等类别作为辅助(使编写查询代码更方便,代码更易读)。
7.2.2:如何使用Criteria查询
(一般构造复杂的查询方法时使用)
1,创建Criteria对象,传入对应实体类的类型对象;2,使用Restrictions对象的静态方法(like,ge,le,in...)构造查询条件;参数分别是(属性名,查询条件的值,关键字的匹配方式)。[关键字的匹配方式有:MathMode.ANYWHERE,MathMode.End,MathMode.START,MathMode.EXACT(精确查询)]。查询的排序方法通过Crieteria的addOrder方法指定(还支持分页查询)。
代码:
//1,
Criteria c=session.createCriteria(TblFwxx.class);
if(null!=condition){
if(condition.getTitle()!=null&&!condition.getTitle().equals("")){
//2,
c.add(Restrictions.like("title",condition.getTitle(),MatchMode.ANYWHERE));
}
if(condition.getZj1()!=0){
c.add(Restrictions.ge("zj",condition.getZj1()));
}
if(condition.getZj2()!=0){
c.add(Restrictions.le("zj",condition.getZj2()));
}
if(condition.getLxIds().length>0){
c.add(Restrictions.in("lx.lxid",condition.getLxIds()));
}
}
//排序
c.addOrder(Order.asc("fwid"));
return c.list();
小结:
HQL支持两种主要的查询方式:HQL查询和Criteria查询。
HQL是一种面向对象的查询语言,支持属性查询,参数查询,关联查询,分页查询等特性,并支持SQL函数(count....)。
执行HQL语句首先要创建Query对象,Query对象封装了查询条件所需要的大部分操作(设置参数,执行查询,设置反回数据的开始位置和总的返回条数等)。
复杂的查询使用Criteria将更方便,Criteria采用面向对象的方式查询条件的组装过程进行了封装。Restrictions提供了很多静态方法用于构造查询条件。
分享到:
相关推荐
hibernate008:查询 hibernate009 示例:spring hibernate010 事务示例:dbUnit 单元测试示例 hibernate011:拦截器中的事件示例 hibernate012:hibernate 验证器示例 hibernate013:hibernate 缓存搜索示例 ...
七、 Hibernate 的应用 Hibernate 广泛应用于各种 Java 项目中,例如: * 企业级应用:Hibernate 广泛应用于企业级应用中,例如银行、证券、保险等行业。 * web 应用:Hibernate 广泛应用于 web 应用中,例如 On...
本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板引擎来生成执行的SQL语句。 一、Hibernate简介 Hibernate作为一款强大的持久层框架,它简化了Java应用程序与数据库之间的交互。...
3. 查询语言(HQL):Hibernate查询语言,类似于SQL,但面向对象,可以方便地进行复杂查询。 4. Criteria API:一种更加面向对象的查询方式,提供构建动态查询的能力。 四、缓存机制 Hibernate使用缓存提高性能,...
- **查询**: 支持HQL(Hibernate Query Language)和原生SQL查询,HQL支持面向对象的语法,更易于编写和理解。 - **事务管理**: 提供了对数据库事务的支持,可以控制事务的开启、提交或回滚,确保数据的一致性和完整...
- **查询语言**: Hibernate提供两种查询方式:HQL(Hibernate Query Language)和Criteria API。 - **分页查询**: 支持通过设置查询参数来实现结果集的分页显示。 #### 七、高级特性 - **缓存机制**: Hibernate支持...
3. Criteria查询:除了SQL和HQL之外,Hibernate还提供了Criteria API,这是一种更面向对象的查询方式,通过构建对象来表达查询条件。 二、Entity和Mapping 1. Entity:在Hibernate中,一个Java类可以被标记为@...
#### 八、Hibernate查询(HQL) - **项目:hibernate_0700_HQL** - 基本HQL查询 - 分页查询 - 排序查询 - 条件查询 - 复杂查询 #### 九、性能优化 - **项目:hibernate_0800_PerformanceOptimization** - ...
#### 七、查询语言 - **HQL (Hibernate Query Language)**:是一种面向对象的查询语言,允许开发人员使用对象模型而不是表结构来构建查询。 - **Criteria API**:提供了一种编程式的方法来构建复杂的查询条件。 - *...
### Hibernate框架ORM的实现原理详解...此外,Hibernate还提供了丰富的特性,如事务管理、查询语言支持等,极大地提升了开发效率和代码质量。了解Hibernate的实现原理有助于更好地运用这一框架,解决实际开发中的问题。
#### 七、Hibernate与JDBC的对比 ##### 7.1 Hibernate相对于JDBC的优势 - **面向对象的编程方式**:Hibernate允许开发者以面向对象的方式操作数据库,提高了代码的可读性和可维护性。 - **减少编码工作量**:由于...
1. HQL:Hibernate查询语言,类似SQL但面向对象,可以方便地进行对象间的关联查询。 2. Criteria API:提供更灵活的查询方式,通过构建查询条件动态生成SQL。 七、缓存机制 1. 一级缓存:每个Session内部的缓存,...
- HQL:Hibernate 查询语言,类似 SQL,但面向对象,允许开发者以类和对象的方式进行查询。 - Criteria API:一种基于对象的查询方式,提供了动态构建查询的能力。 五、二级缓存 为了提高性能,Hibernate 提供了二...
- **Query**:用于执行HQL(Hibernate Query Language)查询,这是一种面向对象的查询语言,类似于SQL但更易于理解和使用。 ### 知识点四:Hibernate的基本操作流程 1. **加载配置文件**:通过`Configuration`类...
5. Criteria API/Query API/HQL:提供了多种查询方式,包括基于对象的Criteria API,SQL-like的HQL(Hibernate Query Language),以及更现代的JPA 2.1的JPQL。 三、Hibernate的实体类与表映射 1. Entity:通过@...
4. **查询(Query)**:通过Session的createQuery()或createSQLQuery()方法,执行HQL(Hibernate Query Language)或原生SQL查询。 **知识点七:事务处理** 由于数据库操作通常涉及多条语句,因此需要使用...
在这个系统中,我们可以通过Hibernate来处理员工和经理的数据,如添加、删除、修改和查询等操作。 三、项目结构 项目文件名为“employee-manager-master”,通常包含以下几个主要部分: 1. **src/main/java**:存放...
- **Query**: 支持多种查询方式,包括HQL(Hibernate Query Language)、Criteria API以及Native SQL查询等。 #### 四、映射策略与配置 - **映射文件**: 使用XML格式定义类与表之间的映射关系。 - **注解映射**: ...
5. **HQL(Hibernate Query Language)**: HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但更贴近Java对象模型。 **三、配置Hibernate** 1. **Hibernate配置文件(hibernate.cfg.xml)**: 配置文件包含了...