版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据查询方式回顾HQL查询方式QBC查询方式(Query
By
Criteria)原生SQL方式导入新课HQL查询方式QBC查询方式原生SQL方式·
难点:·
HQL,QBC8.3
数据查询方式Hibernate提供的面向对象查询方式,通过正确配置关联关系,指定查询条件,就可以轻松得到数据,避免冗长的SQL代码。Hibernate支持的数据查询方式包括:HQLQBC原生SQL返回8.3.1
数据查询方式—HQL(1)HQL(HibernateQueryLanguage)语法结构和SQL相似,其功能如下:支持条件查询。支持连接查询。支持分页查询。支持分组查询(having和group
by)。支持内置函数和自定义函数查询(sum()、min()、max())。支持子查询,即嵌入式查询。支持动态绑定参数查询。8.3.1
数据查询方式—HQL(2)Session类的find()方法以及Query接口都支持HQL检索方
式。区别在于:前者只是执行一些简单HQL查询语句的便
捷方法,不具有动态绑定参数的功能,而且在
Hibernate3.x版本中,已经淘汰了find()方法;而Query接口才是真正的HQL查询接口,它提供了以上列出的各种查
询功能。HQL查询完全面向对象的查询例如:u.firstname
=
?");Query
q
=
session.createQuery(“from
User
u
whereq.setString(0,
"Max");List
result
=
q.list();u.firstname
=
:fname"Query
q
=
session.createQuery("from
User
u
whereq.setString("fname",
"Max");List
result
=
q.list();属性查询Query
q
=
session.createQuery(“select
u.username
from
User
uQuery
query
=
session.createQuery("select
,
s.age
from
StudeList
list
=
query.list();
for(int
i=0;i<list.size();i++){Object
obj[]=(Object[])list.get(i);System.out.println(obj[0]+"的岁数为:"+obj[1]);}实例化查询Query
query
=
session.createQuery("select
new
Student(,
s.agStudent
as
s");List
list
=
query.list();for(int
i=0;i<list.size();i++){Student
stu=(Student)
list.get(i);}要定义对应的构造函数连接查询Object
obj[]=null;Team
team
=
null;for(int
i=0;i<list.size();i++){obj=
(Object[])
list.get(i);stu=(Student)
obj[1];team=(Team)
obj[0];//team
=
(Team)list.get(i);System.out.println(stu.getName()+"属于:"+team.getTeamName(}//提交事务,关闭会话System.out.println(team.getStudents.size());使用join
fetch连接,将会对学生预先抓取session=HibernateUtil.currentSession();//开启连j接oin
fetchtx=session.beginTransaction();//开启事务Query
query
=
session.createQuery(“
from
Team
t
join
t.studentsList
list=query.list();统计函数(Aggregate
functions)返回属性的统计函数的结果select
avg(cat.weight)
from
eg.Cat
catselect
sum(cat.weight)
from
eg.Cat
catselect
max(cat.weight)
from
eg.Cat
catselect
count(cat)
from
eg.Cat
catselect
upper()
from
eg.Cat
catselect
distinct
from
eg.Cat
cat多态(polymorphism)查询下列查询会返回所有的持久化对象报销单请假单采购单from
java.lang.Object
o实际应用:在一个列表页面列出所有申请单from
BusinessDocument
o业务单据子查询对于支持子查询的数据库来说,Hibernate支持在查询中嵌套子查询from
Student
stuwhere
stu.age
>(select
avg(s.age)from
Student
s)8.3.2
数据查询方式—QBCQBC(QueryByCriteria)使用Hibernate的CriteriaAPI进行数据检索方式,通过Session类创建Criteria实例,并调用该实例的不同方法进行数据检索。采用HQL检索方式时,在应用程序中需要定义基于字符串形式的HQL查询语句。QBC
API提供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和Expression类组成,它支持在运行时动态生成查询语句。通过将条件加入到Criteria实例中Criteria实例是一个查询条件的容器Criteria查询是更符合面向对象的编程方式QBC查询(Query
By
Criteria)·
查询所有学生Criteria
criteria
=
session.createCriteria(Student.class);List
students
=
criteria.list();·
查询年龄位于18-20之间,姓’Zhang’的学生List
students=null;Criteria
crit
=
session.createCriteria(Student.class)
;crit.add(Restrictions.like(“stuName",
“Zhang%")
)
;crit.add(Restrictions.between(“age",
18,
20)
);students
=
crit.list();连接设定HQL中预先抓取from
Team
t
left
join
fetch
t.students
swhere
t.teamName
like
‘%2’Criteria查询设置预先抓取,与上面等效List
list
=
Session.createCriteria(Team.class).setFetchMode(“students”,
FetchMode.JOIN).add(Restriction.like(“teamName”,”2”,MatchMode.END)).list();HQL查询总是忽略配置文件中的预先抓取FetchMode.JOIN
预先抓取FetchMode.SELECT
延迟加载FetchMode.DEFAULT
使用配置中的加载策略QBC统计·
在QBC中可以用Projections实现统计,Projections有以下的方法:avg()rowCount()count()max()min()countDistinct()QBC统计//统计员工数量Criteria
crit
=
session.createCriteria(EmployeeVO.class);//countDistinct()去重复crit.setProjection(Projections.count("oid"));List
emps=crit.list();//求年龄最大的员工Criteria
crit
=
session.createCriteria(EmployeeVO.class);crit.setProjection(Projections.max(“age"));List
emps
=
crit.list();QBC去重复根元素Criteria
crit=session.createCriteria(EmployeeVO.class);crit.setFetchMode("department",FetchMode.JOIN);crit.setResultTransformer(crit.DISTINCT_ROOT_ENTITY);//去重复List
emps=crit.list();for
(Iterator
iter
=
emps.iterator();
iter.hasNext();)
{EmployeeVO
emp=(EmployeeVO)iter.next();System.out.println("员工名称:"+emp.getEmpName()+"部门:"+emp.getDepartment().getDeptName());}数据查询方式—QBCQBC查询方式的实现步骤://创建一个Criteria对象Criteriacriteria=session.createCriteria(Customer.class);//设定查询条件,然后把查询条件加入到Criteria中Criterioncriterion1=Expression.like("name","T%");Criterioncriterion2=Expression.eq("age",newInteger(21));criteria.add(criterion1);criteria.add(criterion2);//执行查询语句,返回查询结果
Listresult=criteria.list();8.3.2
数据查询方式—QBC(3)调用Session的createCriteria()方法创建一个Criteria对象。设定查询条件。Expression类提供了一系列用于设定查询条件的静
态方法,这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。Criteria的add()方法用于加入查询条件。调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在List集合中存放了符合查询条件的持久化对象。对于以上程序代码,当运行Criteria的list()方法时,Hibernate执行的SQL查询语句为:select*fromCUSTOMERSwhereNAMElike"T%"andAGE=21;返回使用QBC方式查询部分字段和使用聚集函数代码示例:ProjectionList
proList
=
Projections.projectionList();proList.add(Projections.groupProperty("empno"));
proList.add(Projections.groupProperty("ename"));
proList.add(Projections.sum("sal"));
criteria.setProjection(proList);
criteria.add(Restrictions.eq("deptNo",
20));List<Object>
list
=
criteria.list();for
(Object
obj:
list)
{Object[]
objArray
=
(Object[])obj;System.out.println("empno
=
"
+
objArray[0]
+
",ename="
+
objArray[1]",salavg="
+
objArray[2]);}使用QBC方式查询部分字段和使用聚集函数·
生成的SQL语句如下Selectthis_.EMPNO
as
y0_,
this_.ENAME
as
y1_,sum(this_.SAL)
as
y2_fromemp
this_wherethis_.DEPT_NO=?group
bythis_.EMPNO,
this_.ENAME使用ProjectionList
可以将多个查询组件合并在一个list里面,然后一次性的放入到criteria中。查询部分字段,其实就是变向的使用Projections.groupProperty8.3.3
数据查询方式—原生SQL(1)采用HQL或QBC检索方式时,Hibernate会生成标准的SQL查询语句,适用于所有的数据库平台,因此这两种检索方式都是跨平台的。有的应用程序可能需要根据底层数据库的SQL方言,来生成一些
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年个人商品购销协议样式
- 高等教育教材设计与实施路径
- 2024年股权转让化协议范本
- 2024建筑材料钢筋采购协议例文
- 钢构安装项目2024年承揽协议模板
- 城市绿化树木买卖协议规范化文档
- 2024年人社部劳动协议模板专业
- 建设项目环境影响评价资质证书登记表
- 2024年化彩钢板房搭建服务协议
- 企业投资合同范本
- DB23T 3676.4-2023 室内运动冰场制冰要求 第4部分 冰盘
- 食堂员工安全知识培训
- 金融产品培训课件
- 小儿社区获得性肺炎查房课件
- 国家临床版3.0手术操作编码(ICD-9-CM3)
- 降低危重患者早期肠内营养的不耐受性品管圈课件
- 新型冠状病毒检测技术规范:污水样本病毒富集浓缩和检测
- 智能制造的战略和决策支持
- 2024年临床医学培训的人才需求与培养
- 妇产科学课件:盆腔炎性疾病
- 医疗文书管理规定医疗管理办法
评论
0/150
提交评论