`
neeleon
  • 浏览: 183478 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate入门(五)完善工具类及HQL QBC初步相关

阅读更多

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 InterfaceCriterion 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

    标题中的“Hibernate-HQL-QBC-QBE”涵盖了四个重要的Java持久化框架Hibernate中的概念,分别是Hibernate Query Language(HQL)、Query By Criteria(QBC)、Query By Example(QBE)以及相关的库文件。以下是对这些...

    Hibernate_QBC和Hibernate_QBE

    虽然没有提供具体的源码,但我们可以理解在Hibernate框架中,QBC和QBE的实现都涉及到对Criteria接口或Example类的使用。Criteria接口提供了添加限制条件、排序、分页等方法,而Example类则用于构建基于对象属性的...

    精通hibernate HQL语言

    在深入探讨Hibernate的HQL语言之前,我们先理解一下什么是HQL。HQL,全称Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言,它的语法结构与SQL相似,但主要针对对象和实体进行操作,而不是...

    Hibernate入门教程

    此外,Hibernate的Criteria、HQL(Hibernate Query Language)和QBC(Query By Example)提供了一种更高级、更面向对象的方式来查询数据库。 在实际应用中,Hibernate允许开发者通过简单的对象操作完成复杂的数据库...

    《Hibernate快速入门手册》

    6. **HQL和QBC查询**:学习Hibernate查询语言(HQL)和Criteria API,理解它们与SQL的区别,并编写复杂的查询语句。 7. **一对多、多对一、多对多关系映射**:配置和处理不同类型的关联关系,如用户和订单的一对多...

    QBC的各种查询

    在实际开发中,QBC与Hibernate的其他查询方式,如HQL(Hibernate Query Language)和Criteria API,可以灵活搭配使用,根据项目需求选择最适合的查询手段。QBC的优势在于它的直观性和灵活性,但可能在性能上略逊于...

    Hql详解[文].pdf

    《深入理解Hibernate Hql》 Hibernate Query Language(Hql)是Hibernate框架中用于操作对象-关系映射(ORM)的一种语言,...在实际应用中,结合QBC和其他Hibernate工具,我们可以构建出高效、健壮的Java持久层代码。

    eclipse 下的hibernate tools

    3. **代码生成**:能够根据实体类生成对应的 DAO(数据访问对象)层和 SQL 映射文件(如 HQL 或者 QBC 查询),简化了数据操作的实现。 4. **HQL 编辑器**:提供了对 Hibernate 查询语言(HQL)的支持,可以进行...

    hibernate中文开发手册

    10. **实用工具与扩展**:除了基本功能,Hibernate还提供了许多实用工具,如QBC(Query By Example)、Hibernate Tools等,手册会介绍这些工具的使用。 这份PDF手册是学习和理解Hibernate不可或缺的资源,无论你是...

    Hibernate执行持久层访问步骤

    1. HQL查询:使用Session的createQuery()方法创建HQL(Hibernate Query Language)查询对象,然后设置参数,最后调用list()或uniqueResult()执行查询。 2. QBC查询:Query By Criteria API允许基于Java对象属性进行...

    Hibernate.3.6.10帮助文档

    10. **工具与插件**:介绍了Hibernate提供的工具,如SchemaExport用于生成数据库表结构,Enhancer用于增强实体类,以及IDE集成插件等。 11. **最佳实践**:分享了在实际开发中使用Hibernate的一些最佳实践和注意...

    hibernate的jar包

    - Hibernate Tools:一套辅助工具,包括Hibernate逆向工程,用于从现有数据库生成实体类和映射文件,以及HQL查询编辑器等。 2. Hibernate的功能: - 对象关系映射:将Java类映射到数据库表,对象的属性对应表的...

    深入浅出Hibernate

    5. HQL和QBC:Hibernate查询语言(HQL)和Query By Criteria(QBC)是Hibernate提供的两种高级查询方式,它们允许开发者以面向对象的方式编写查询,避免了直接使用SQL的复杂性。 6. 关联映射:详细阐述一对一、一对...

    hibernate中文帮助文档

    6. **HQL与QBC**: Hibernate查询语言(HQL)是面向对象的查询语言,类似SQL但更接近Java。另外,Query By Criteria(QBC)提供了一种基于对象的查询方式,可以动态构建查询条件。 7. **级联操作与缓存**: Hibernate...

    Hibernate相关文档下载(全)

    8. **Hibernate工具** Hibernate提供了SchemaExport工具,可以自动生成数据库表结构;Hibernate Console是图形化的工具,用于可视化配置和运行HQL;Hibernate Tools则集成了Eclipse或IDEA等IDE,提供代码生成、逆向...

    hibernate 3.2中文手册 中文文档

    - 指导如何使用Ant构建工具来编译代码、部署应用及执行Hibernate任务。 - **1.2.5 启动和辅助类** - 讲解启动应用时所需的辅助类和配置,如`SessionFactory`的创建等。 - **1.2.6 加载并存储对象** - 介绍如何...

    Hibernate 包

    12. **Hibernate工具**: Hibernate提供了逆向工程工具,可以从现有数据库生成实体类和映射文件,简化开发过程。 总的来说,这个"Hibernate 包"中的`hibernate-3.6.8核心包`是Java开发者进行ORM开发的基础,它包含了...

    Hibernate必备资源包

    5. **查询语言**: HQL(Hibernate Query Language)和QBC(Query By Criteria)是Hibernate提供的两种面向对象的查询语言,可以替代SQL进行数据库查询。 6. ** Criteria查询**: 一种更强大的查询方式,允许动态构建...

    hibernate和spring技术难点及其要点总结

    3. **使用场景**:在BMP(Bean管理持久性)模式中,Hibernate同样可以作为数据库访问的工具。 **二、Spring框架中的Hibernate支持** 1. **HibernateDaoSupport与JdbcDaoSupport**:Spring提供了这些支持类来简化...

    hibernate-3.2.rar

    7. **HQL和QBC**:HQL是Hibernate特有的面向对象的查询语言,类似于SQL,但操作的是对象而非表。Query By Criteria(QBC)是另一种查询方式,基于对象模型构建查询条件,更加灵活。 8. **二级缓存**:为了提高性能...

Global site tag (gtag.js) - Google Analytics