文档章节

Hibernate中HQL和QBC

猪刚烈
 猪刚烈
发布于 2014/09/24 13:56
字数 891
阅读 31
收藏 1

Hibernate检索对象的方式

导航对象检索方式

根据已加载的对象,导航到与之关联的对象。

OID检索方式

根据对象的OID检索。Session的get和load方法。

HQL

面向对象的查询语言,与SQL很相似。提供HQL查询的接口,能够执行各种HQL语句。

实例:

Query query=session.createQuery(“select * from Studentas s where  s.name=:studentName and s.age=:studentage”);

query.setString(“studentname”,”zhangsan”);

query.setInterger(“studentage”,20);

List list=query.list();

HQL检索的一般步骤

1)通过SessioncreateQuery()方法创建一个Query对象,它包含一个HQL查询语句。HQL查询语句可以包含命名参数,如customerNamecustomerAge都是命名参数。

2)动态绑定参数。Query接口提供了给各种类型的命名参数赋值的方法,例如setString()方法用于为字符串类型的customerName命名参数赋值。

3)调用Querylist()方法执行查询语句。该方法返回List类型的查询结果,在List集合中存放了符合查询条件的持久化对象。

HQL支持链式的编程风格

 

Listresult=session.createQuery("……")

.setString("customerName","Tom")

.setInteger("customerAge",21)

.list();

 

QBC

使用QBC 的API来检索对象,提供了更加面向象对象的检索方式。

实例:

Criteriacriteria=session.createCriteria(Student.class);

Criterion criterion1=Experssion.like(“name”,”a%”);

Criterion criterion2=Expression.eq(“age”,newInteger(20));

criteria.add(criterion1);

criteria.add(criterion2);

List list=criteria.list();

QBC检索的一般步骤

 

 

(1)调用Session的createCriteria()方法创建一个Criteria对象。

(2)设定查询条件。Expression类提供了一系列用于设定查询条件的静态方法,这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。Criteria的add()方法用于加入查询条件。

(3)调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在List集合中存放了符合查询条件的持久化对象。对于以上程序代码,当运行Criteria的list()方法时,Hibernate执行的SQL查询语句为:

select * from CUSTOMERS where NAME like 'T%' andAGE=21;

QBC同样支持链式的编程风格

 

Listresult=session.createCriteria(Customer.class)

.add(Expression.like("name","T%")

.add(Expression.eq("age",newInteger(21))

.list();

 

 

分页查询

 

 

Query和Criteria接口都提供了用于分页显示查询结果的方法:

–setFirstResult(intfirstResult):设定从哪一个对象开始检索,参数firstResult表示这个对象在查询结果中的索引位置,索引位置的起始值为0。默认情况下,Query和Criteria接口从查询结果中的第一个对象,也就是索引位置为0的对象开始检索。

–setMaxResult(int maxResults):设定一次最多检索出的对象数目。默认情况下,Query和Criteria接口检索出查询结果中所有的对象。

实例:采用HQL分页

Queryquery=session.createQuery(“from student as s where  order by s.name asc”);

query.setFirstResult(10);

query.setMaxResults(10);

List list=query.list();

采用QBC分页
Critria criteria=session.createCriteria(student.class);

criteria.addOrder(Order.asc(“name”));

criteria.setFirstResult(10);

criteria.setMaxResults(10);

List list=criteria.list();

 

 

 

 

 

实例:

Query query=session.createQuery(“select s.name,s.age  from Student as s”);

List list=query.list();

for(int i=0;i<list.size();i++)

{

   Object[]obj=(Object[])list.get(i);

  System.outprintln(obj[0]);

  System.outprintln(obj[1]);

}

 

当我们查询语句中返回的并不是一个对象而是一个对象的某个或者某几个属性的时候,那么list返回的就是一个个的object数组,因此我们可以通过object数组的方法获得。

另外一种方法就是构造与之对应的构造函数。

例如:在Student中这样的构造方法:

public Student(String name,int age)

{

    this.name=name;

    this.age=age;

}

 

 Query query=session.createQuery(select newStudent(s.name,s.age)  from Student as s);

List list=query.list();

for(;Iteratoriterator=list.iterator();iterator.hasNext();)

{

   Studentstu=(Student)iterator.next();

  System.out.println(stu.name);

  System.out.println(stu.age);

}

 

 

本文转载自:http://blog.csdn.net/u013516966/article/details/39235811

猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
私信 提问
Hibernate Hibernate的检索方式

HIbernate提供了以下几种检索对象的方式: ①、导航对象图检索方式:根据已经加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用它的getOrders().iterator()方法就可以导航...

Winnie007
2015/10/02
30
0
Java程序员从笨鸟到菜鸟之(六十四)细谈Hibernate(十五)HQL与QBC查询方式详解

首先来看一下,hibernate提供的几种检索方式: 1.导航对象图检索方式 :根据已经加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用它的getOrders().iterator()方法就可以...

长平狐
2012/11/12
199
0
Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)

1.非集成Spring Hibernate的检索方式,主要有以下五种。 1.导航对象图检索方式。(根据已经加载的对象,导航到其他对象。) 2.OID检索方式。(按照对象的OID来检索对象。) 3.HQL检索方式。(...

长平狐
2013/01/06
2.2K
0
我心中的Hibernate

刚才看到一哥门说Hibernate无法更新对象的一个属性。现在我说说我的看法。 首先我认为一个框架如果不能改变我的编程思维,那么我觉得没必要学。Hibernate我用了一些时间,感觉Hibernate做到的...

喜之郎
2012/10/10
1K
11
Hibernate从零开始_08_检索方式

在实际项目应用中使用最多的就是数据的查询,在这里我们介绍一下Hibernate的几种检索方式: 1、导航对象图检索方式 在使用一对多关系时,一个客户对应多个定单这时我们可以: TbUser user = ...

落泪归枫
2014/01/10
73
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部