您的位置:首页 > 其它

HQL简单属性和实体对象查询

2011-08-12 09:52 225 查看
在HQL中,关键字不区分大小写,但属性名和类名区分大小写。

1.简单属性查询

(1)单一属性查询:返回的结果集为属性列表,其类型与实体中该属性的类型一致

List students=session.createQuery("select name from Student").list();

返回结果集List中是name集合,其类型与实体类Student中name的类型保持一致。

(2)多个属性查询:返回的结果集为对象数组,数组元素的类型与对应实体中的属性类型一致,其长度取决于select中属性的个数。

List students=session.createQuery("select id,name from Student").list();

这样遍历得到的是对象数组Object【】,其第一个元素为id,即下标值为0,第二个元素为name,下标值为1.

如何得到Student类型呢,采用HQL动态实例化Student对象,

首先为Student提供无参的构造函数,和一个带有id和name参数的构造函数,从而有

List students=session.createQuery("select new Student(id,name) from Student").list();

这样遍历得到的是Student对象。

(3)可以使用别名

List students=session.createQuery("select s.id,s.name from Student 【as】 s").list();



2.实体对象查询

(1)不使用select

List students=session.createQuery(" from Student").list();

返回的结果为实体对象集合

(2)不使用select,用别名

List students=session.createQuery(" from Student 【as】 s").list();

返回的也是实体对象集合

(3)使用select,必须用别名

List students=session.createQuery(" select s from Student 【as】 s").list();

返回的也是实体对象集合

但是使用select * from Student 是不支持的。

(4)使用Iterator接口

Iterator iter=session.createQuery(" from Student").iterate();

注意 iterate和list的区别:

A:使用iterate查询,在默认情况下利用缓存数据,若缓存中不存在相应记录,会出现N+1问题。

所谓“1”:即首先发出一条查询对象id列表的sql语句;

所谓”N“:根据id到缓存中查询,若缓存中没有与之匹配的记录,则根据id发出相应的sql查询语句。

B:list每次都会发出sql查询语句,会向缓存中放入数据,但默认情况下不利用缓存中的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐