`
neeleon
  • 浏览: 176096 次
  • 性别: 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:Java 对象持久化技术详解(第2版).part2

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    Java Web程序设计教程

    15.4.2工具类的实现 304 15.4.3管理员登录与退出实现 306 15.4.4系统管理实现 313 15.4.5图书管理实现 319 15.4.6读者管理实现 329 15.4.7借还管理实现 333 15.4.8前台功能实现 336 本章小结 342

    低清版 大型门户网站是这样炼成的.pdf

    (Struts 2+Spring 2+Hibernate 3).pdf(完整版) 网上有高清版350M的。可以去下 http://115.com/file/be5gwid8 请于下载后 24H 内及时删除!请抱着学习的态度下载此资料。 总共900多页!!!!!!! 第1篇 ...

    Java学习笔记-个人整理的

    {4.8}Collections集合工具类}{86}{section.4.8} {4.9}Comparable与Comparator}{86}{section.4.9} {4.9.1}Comparable}{86}{subsection.4.9.1} {4.9.2}Comparator}{87}{subsection.4.9.2} {4.10}包装类}{87}{...

Global site tag (gtag.js) - Google Analytics