JAVA基础:Hibernate数据查询(2)
发布时间:2012/4/28 16:24:55 来源:城市网学院 编辑:ziteng
/** *//**要正确运行以上程序,需要在TRegister类中加入一个相应的构造函数
public TRegister(String userName,String sex) {
this.userName = userName;
this.sex = sex;
}
*/
}
统计函数查询
可以在HQL中使用函数,经常使用的函数如下:
count():统计记录条数。
min():求最小值。
max():求最大值。
sum():求和。
avg():求平均值。
例如,要取得Student实例的数量,可以编写如下HQL语句:
select count(*) from Student
取得Student平均年龄的HQL语句:
select avg(s.age) from Student as s
可以使用distinct去除重复的数据:
select distinct s.age from Student as s
where子句:
HQL也支持子查询,它通过where子句实现这一机制。where子句可以让用户缩小要返回的实例的列表范围。例如下面语句会返回所有名字为"Bill"的Student实例:
Query query = session.createQuery("from Student as s where s.name='Bill'");
where子句允许出现的表达式包括了SQL中可以使用的大多数情况。
数学操作:+,-,*,/
真假比较操作:=, >=, <=, <>, !=, like
逻辑操作:and ,or, not
字符串连接:||
SQL标题函数 :如upper()和lower()
如果查询返回多条记录,可以用以下关键字来量化
all:表示所有的记录。
any:表示所有记录中的任意一条。
some:与any相同。
in:与any等价。
exists:表示子查询至少要返回一条记录。
例如,下面语句返回所有学生年龄都大于18的班级对象
from Group g where 18<all (select s.age from g.students s)
下列语句返回在所有学生中有一个学生的年龄等于22的班级:
from Group g where 22 = any (select s.age from g.students s)
或者
from Group g where 22= some(select s.age from g.students s)
或者
from Group g where 22 in (select s.age from g.students s)
order by子句
查询返回列表可以按照任何返回的类或者组件的属性排序
from Student s order by s.name asc
连接查询
与SQL一样,HQL也支持连接查询,如内连接,外连接和交叉连接:
inner join:内连接
left outer join:左外连接
rigth outer join:右外连接
full join:全连接,但不常用
下面我重点介绍下内连接查询,左外连接和或外连接和内连接大同小异,而全连接几乎没有使用得到的地方。
inner join可以简写为join,例如在查询得到的Group对象时,内连接取得对应的Student对象,实现的程序代码如下:
Student stu = null;
Group group = null;
Query query = session.createQuery("from Group g join g.students");
List list = query.list();
Object obj[] = null;