欢迎来到天天文库
浏览记录
ID:21242001
大小:1.59 MB
页数:33页
时间:2018-10-20
《Hibernate 查询策略》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Hibernate查询策略回顾多对一关联一对一关联一对多关联多对多关联目标HQL查询CriteriaQueryNativeSQL查询Hibernate数据查询数据查询与检索是Hibernate的一个亮点。Hibernate的数据查询方式主要有3种,它们是:HibernateQueryLanguage(HQL)CriteriaQuery(QBC)(QBE)NativeSQL下面对这3种查询方式分别进行讲解。HQLHibernateQueryLanguage(HQL)提供了十分强大的功能,推荐大家使用这种查询方式。HQ
2、L具有与SQL语言类似的语法规范,只不过SQL针对表中字段进行查询,而HQL针对持久化对象,它用来取得对象,而不进行update、delete和insert等操作。而且HQL是完全面向对象的,具备继承、多态和关联等特性。HQLfrom子句from子句是最简单的HQL语句,例如fromStudent,也可以写成selectsfromStudents。它简单地返回Student类的所有实例。除了Java类和属性的名称外,HQL语句对大小写并不敏感,所以在上一句HQL语句中,from与FROM是相同的,但是Student
3、与student就不同了,所以上述语句写成fromstudent就会报错。HQL下列程序演示如何通过执行from语句取得所有的Student对象。Queryquery=session.createQuery(“fromStudent”);Listlist=query.list();for(inti=0;i4、Course”,并不简单地返回两个对象,而是返回这两个对象的的笛卡儿积,这类似于SQL语句中字段的全外连接。在实际应用中,像“fromStudent,Course”这样的语句几乎不会出现。HQLselect子句有时并不需要得到对象的所有属性,这时可以使用select子句进行属性查询,例如,selects.namefromStudents。下面程序演示如何执行这个语句:Queryquery=session.createQuery(“selects.namefromStudents”);Listlist=query.l5、ist();for(inti=0;i6、(Object[])list.get(i);System.out.println(name(obj[0]+“的性别是:”+obj[1]));}HQL在使用属性查询时,由于使用对象数组,操作和理解都不太方便,如果将一个object[]中所有成员封装成一个对象就方便多了。下面的程序将查询结果进行了实例化:Queryquery=session.createQuery(“selectnewStudent(s.name,s.sex)fromStudents”);Listlist=query.list();for(inti=07、;i8、n():求最小值max():求最大值sum():求和avg():求平均值例如,要取得Student实例的数量,可以编写如下HQL语句:selectcount(*)fromStudent取得Student的平均年龄的HQL语句如下:selectavg(s.age)fromStudentass可以使用distinct去除重复数据:selectdistincts.
4、Course”,并不简单地返回两个对象,而是返回这两个对象的的笛卡儿积,这类似于SQL语句中字段的全外连接。在实际应用中,像“fromStudent,Course”这样的语句几乎不会出现。HQLselect子句有时并不需要得到对象的所有属性,这时可以使用select子句进行属性查询,例如,selects.namefromStudents。下面程序演示如何执行这个语句:Queryquery=session.createQuery(“selects.namefromStudents”);Listlist=query.l
5、ist();for(inti=0;i6、(Object[])list.get(i);System.out.println(name(obj[0]+“的性别是:”+obj[1]));}HQL在使用属性查询时,由于使用对象数组,操作和理解都不太方便,如果将一个object[]中所有成员封装成一个对象就方便多了。下面的程序将查询结果进行了实例化:Queryquery=session.createQuery(“selectnewStudent(s.name,s.sex)fromStudents”);Listlist=query.list();for(inti=07、;i8、n():求最小值max():求最大值sum():求和avg():求平均值例如,要取得Student实例的数量,可以编写如下HQL语句:selectcount(*)fromStudent取得Student的平均年龄的HQL语句如下:selectavg(s.age)fromStudentass可以使用distinct去除重复数据:selectdistincts.
6、(Object[])list.get(i);System.out.println(name(obj[0]+“的性别是:”+obj[1]));}HQL在使用属性查询时,由于使用对象数组,操作和理解都不太方便,如果将一个object[]中所有成员封装成一个对象就方便多了。下面的程序将查询结果进行了实例化:Queryquery=session.createQuery(“selectnewStudent(s.name,s.sex)fromStudents”);Listlist=query.list();for(inti=0
7、;i8、n():求最小值max():求最大值sum():求和avg():求平均值例如,要取得Student实例的数量,可以编写如下HQL语句:selectcount(*)fromStudent取得Student的平均年龄的HQL语句如下:selectavg(s.age)fromStudentass可以使用distinct去除重复数据:selectdistincts.
8、n():求最小值max():求最大值sum():求和avg():求平均值例如,要取得Student实例的数量,可以编写如下HQL语句:selectcount(*)fromStudent取得Student的平均年龄的HQL语句如下:selectavg(s.age)fromStudentass可以使用distinct去除重复数据:selectdistincts.
此文档下载收益归作者所有