1
.无聊的讨论
:
在前面我们写了一个工具类:HibernateUtil
。其实我们还可以把CRUD
操作封装到这个工具类中,并把它们都做成静态的,这样这个工具类就可以直接调用了。但是这样的操作对查询数据可能不是很好,因为它的查询方式很多,除非我们一一考虑这些可能涉及到查询方式,并能以重载的形式进行统一管理。
其实我也试想过把这此数据库操作方法进行二次封装,在工具类写成如下形式:
public void
operate(int i ){
if(i==1){
调用更新方法,执行查询操作}
if(i==2){
调用删除方法,执行查询操作}
if(i==3){
调用插入方法,执行查询操作}
if(i==4){
查询?可指定一个惯用的查询方法,但返回值如何处理,所以建议不在此处写查询,可再写一个查询的统一操作方法来总括所有的查询方法}
}
2
.HQL
的作用概述
数据库的操作,难点主要集中在查询操作中,而HQL
就是专门用来为查询服务的。
3
.HQL
应用的步骤
:
假定我们已有一个Session
对象s
>>
步骤一,获得Query
对象:Query
query=s.createQuery(“HQL SELECT Sentence”);
>>
步骤二,为参数赋值:query.setXXX();
>>
步骤三,获得List
对象:LIST list=query.list();
说明,除了此方法外,Query
接口还有一个常用的方法
uniqueResult
,如果明确查询的结果只有一个,便选择使用此方法。如果查询结果有多个使用此方法会报异常。
>>
步骤四,遍历查询结果:即遍历上面list
对象。
关于步骤二为参数赋值的问题:比如步骤一中的“HQL Sentence
”内容为:from User u where u.name=? and u.password=? and ...
,如果这里的?较少可以setXXX(0,”...”); setXXX(1,”...”);
但是如果?较多,就容易把这些设置写错,所以可以采取命令参数的方式来决定后面的setXXX
的内容。 比如:from User u where u.name=
:uname
and
u.password=
:upass
and ...
,这样后面就可以写setXXX(“uname”,”...”);
4
.一个细节问题:
在前面我们的实体类为User
类,而在实体配置文件中
<
class
name
=
"User"
>
意为它所关联的表为user
表(没有指定名称table
),但如果是oracle
数据库,我们知道它本身就有一张user
表,这样就产生了冲突,如何解决这种冲突?一种方法是设定table
属性为新的名字(首选方法),另一种方法是加`
(数字1
前的那个符号),即这样
<
class
name
=
"User"
table
=
"`user`"
>
写,这样我们的表还是user
表。同样如果属性名与数据库中的关键字产生这种冲突,也可以按此方法解决。
5.
分页技术:
query.setFirstResult(200);query.setMaxReslut(10);
这两句的意思是符合要求的语句有很多条,我们从第200
条取,取出10
条。我们知道每种数据库的分页语句是不同的,而Hibernate
底层判断使用哪种分页语句就是参照前面配置文件的方言属性。
6.QBC
条件查询:
与它相关的是Criteria Interface
,Criterion
Interface,Expressson Class
。其实它的操作和HQL
很相似。同样我们假定已有一个Session
对象s.
>>
步骤一,获得Criteria
对象:Criteria
criteria = s.createCriteria(User.class
);
>>
步骤二,封装查询条件为一个Criterion
对象:Criterion
cr = Expression.eq
("name"
, "new name"
);
(说明Expression
继续于org.hibernate.criterion.Restrictions
类
),所以也可以这样写:Criterion cr=Restrictions.eq("name","new name");
Restrictions
类中的封装查询条件的方法都有
两个参数:前一个参数是指创建Criteria
对象时所使用的参数的属性名,后一个是要与属性名比较的值。比如这里是指User
类的name
属性是否与“new name
”相等
>>
步骤三,获得带查询条件的Criteria
对象:criteria.add(cr);
执行此步才使这个对象具有一个条件限制的查询操作。
>>
步骤四,获得List
对象以遍历:
List clist = criteria.list();
补充说明
:也可以直接返回一个User
对象:User user=(User) criteria.uniqueResult();
特别说明:Criteria
对象也具有分页的功能,方式是和上面Query
一样
。
分享到:
相关推荐
标题中的“Hibernate-HQL-QBC-QBE”涵盖了四个重要的Java持久化框架Hibernate中的概念,分别是Hibernate Query Language(HQL)、Query By Criteria(QBC)、Query By Example(QBE)以及相关的库文件。以下是对这些...
虽然没有提供具体的源码,但我们可以理解在Hibernate框架中,QBC和QBE的实现都涉及到对Criteria接口或Example类的使用。Criteria接口提供了添加限制条件、排序、分页等方法,而Example类则用于构建基于对象属性的...
在深入探讨Hibernate的HQL语言之前,我们先理解一下什么是HQL。HQL,全称Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言,它的语法结构与SQL相似,但主要针对对象和实体进行操作,而不是...
此外,Hibernate的Criteria、HQL(Hibernate Query Language)和QBC(Query By Example)提供了一种更高级、更面向对象的方式来查询数据库。 在实际应用中,Hibernate允许开发者通过简单的对象操作完成复杂的数据库...
6. **HQL和QBC查询**:学习Hibernate查询语言(HQL)和Criteria API,理解它们与SQL的区别,并编写复杂的查询语句。 7. **一对多、多对一、多对多关系映射**:配置和处理不同类型的关联关系,如用户和订单的一对多...
在实际开发中,QBC与Hibernate的其他查询方式,如HQL(Hibernate Query Language)和Criteria API,可以灵活搭配使用,根据项目需求选择最适合的查询手段。QBC的优势在于它的直观性和灵活性,但可能在性能上略逊于...
《深入理解Hibernate Hql》 Hibernate Query Language(Hql)是Hibernate框架中用于操作对象-关系映射(ORM)的一种语言,...在实际应用中,结合QBC和其他Hibernate工具,我们可以构建出高效、健壮的Java持久层代码。
3. **代码生成**:能够根据实体类生成对应的 DAO(数据访问对象)层和 SQL 映射文件(如 HQL 或者 QBC 查询),简化了数据操作的实现。 4. **HQL 编辑器**:提供了对 Hibernate 查询语言(HQL)的支持,可以进行...
10. **实用工具与扩展**:除了基本功能,Hibernate还提供了许多实用工具,如QBC(Query By Example)、Hibernate Tools等,手册会介绍这些工具的使用。 这份PDF手册是学习和理解Hibernate不可或缺的资源,无论你是...
1. HQL查询:使用Session的createQuery()方法创建HQL(Hibernate Query Language)查询对象,然后设置参数,最后调用list()或uniqueResult()执行查询。 2. QBC查询:Query By Criteria API允许基于Java对象属性进行...
10. **工具与插件**:介绍了Hibernate提供的工具,如SchemaExport用于生成数据库表结构,Enhancer用于增强实体类,以及IDE集成插件等。 11. **最佳实践**:分享了在实际开发中使用Hibernate的一些最佳实践和注意...
- Hibernate Tools:一套辅助工具,包括Hibernate逆向工程,用于从现有数据库生成实体类和映射文件,以及HQL查询编辑器等。 2. Hibernate的功能: - 对象关系映射:将Java类映射到数据库表,对象的属性对应表的...
5. HQL和QBC:Hibernate查询语言(HQL)和Query By Criteria(QBC)是Hibernate提供的两种高级查询方式,它们允许开发者以面向对象的方式编写查询,避免了直接使用SQL的复杂性。 6. 关联映射:详细阐述一对一、一对...
6. **HQL与QBC**: Hibernate查询语言(HQL)是面向对象的查询语言,类似SQL但更接近Java。另外,Query By Criteria(QBC)提供了一种基于对象的查询方式,可以动态构建查询条件。 7. **级联操作与缓存**: Hibernate...
8. **Hibernate工具** Hibernate提供了SchemaExport工具,可以自动生成数据库表结构;Hibernate Console是图形化的工具,用于可视化配置和运行HQL;Hibernate Tools则集成了Eclipse或IDEA等IDE,提供代码生成、逆向...
- 指导如何使用Ant构建工具来编译代码、部署应用及执行Hibernate任务。 - **1.2.5 启动和辅助类** - 讲解启动应用时所需的辅助类和配置,如`SessionFactory`的创建等。 - **1.2.6 加载并存储对象** - 介绍如何...
12. **Hibernate工具**: Hibernate提供了逆向工程工具,可以从现有数据库生成实体类和映射文件,简化开发过程。 总的来说,这个"Hibernate 包"中的`hibernate-3.6.8核心包`是Java开发者进行ORM开发的基础,它包含了...
5. **查询语言**: HQL(Hibernate Query Language)和QBC(Query By Criteria)是Hibernate提供的两种面向对象的查询语言,可以替代SQL进行数据库查询。 6. ** Criteria查询**: 一种更强大的查询方式,允许动态构建...
3. **使用场景**:在BMP(Bean管理持久性)模式中,Hibernate同样可以作为数据库访问的工具。 **二、Spring框架中的Hibernate支持** 1. **HibernateDaoSupport与JdbcDaoSupport**:Spring提供了这些支持类来简化...
7. **HQL和QBC**:HQL是Hibernate特有的面向对象的查询语言,类似于SQL,但操作的是对象而非表。Query By Criteria(QBC)是另一种查询方式,基于对象模型构建查询条件,更加灵活。 8. **二级缓存**:为了提高性能...