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

在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查询语句,会向缓存中放入数据,但默认情况下不利用缓存中的数据。


 


 


 

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值