hibernate查询语言hql
在hql中关键字不区分大小写,但是属性和类名区分大小写
1、简单属性查询 1>如果对单一属性进行查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致 例子:
由于第1行中的name是String字符串类型,所以第三行对应的也要是字符串类型。其他的字段也要保持一致。 2>如果是对多个属性进行查询,返回的是Object数组类型,所以其元素类型也要与相对应的属性类型保持一致。 例子:
PS:如果想返回的类型与原来的对象类型保持一致的话,就例子而言就是Student类型,首先先包住Student的POJO类中有Student的两个id,name参数的构造方法。
注:第一行中的new Student(id,name)很重要,决定返回是Student类型,这样更对象化,其他第3行也一致。 2、实体查询 实体查询中,涉及到对对象的查询,对于多个记录,就一般用Querry接口里面的list()和iterate()方法来迭代。 两种方法的区别是: 一、list(),对条件符合的数据全部一次加载,只发出一条语句。 二、iterate(),先把符合条件的id全部查询出来,然后,再根据里面id数量,发出相应的sql语句,就是有N条记录就查询N+1次。 PS:相对而已,lsit()加载了直接放在一级缓存里面,就是Session里面,从来不使用Session iterate()一开始加载,先从一级缓存里面加载,如果有就只查询一次,如果没有就先把符合条件的id全部查询出来,然后,再根据里面id数量,发出相应的sql语句,就是有N条记录就查询N+1次。 例子:
注:只发出一条语句。
注:发出N+1条语句,因为一级缓存里面没有相应的记录。
注:只发出两条查询语句,因为list()已经把数据存在一级缓存里面,对应iterate()先从一级缓存里面查找,所以总共只发出两条查询语句。