Hibernate中的检索方式及其四个细节

  前边我们讲过了Hibernate的检索策略,即Hibernate在从数据库中查询出持久化对象的时机(什么时候将关联对象查询出来),方式(是否在查询当前对象时将关联对象查询出来)和数量(一次查询查出多少关联对象)。在具体的使用中,我们从类级别的查询策略(注意在hbm.xml文件中的lazy属性来决定load方法是否懒加载)、双向一对多和双向多对多的关联关系(这两种关联关系是通过hbm.xml文件中的set节点来使用的,所以我们针对set节点的三个属性来改变Hibernate的检索策略,lazy,fetch,batch-size),单向多对一和双向一对一的关联关系(同样的也有以上类似的lazy属性作用于many-to-one和one-to-many节点从而改变Hibernate的检索策略)。

  今天我们来讲一讲Hibernate的检索方式,不同于检索策略的是,检索方式指的是在查询数据对象时,采用的获取对象的方式或者说采用了途径获取了数据对象

  1.常见的获取数据对象的方式

  ① 通过对象导航图语言,即通过已经获得的对象来间接获取想要的对象:customers.getOrders()

  ② 通过OID获取想要的对象:如get和load方法

  ③ 通过HQL的检索方式:HQL是一种面向对象的查询语言

  ④ QBC检索方式:使用QBC的API来检索对象,这种API封装了基于字符串形式的查询语句,提供了面向对象程度更高的查询接口。

  ⑤ 本地SQL检索方式:使用本地数据库的SQL查询语句

  2.HQL的检索方式

  ① HQL是一种面向对象的查询语言,与SQL语言及其相似,唯一不同的是,SQL语句中面向和使用的是表和字段,而HQL中面向和使用的是类和属性

  ② 在Hibernate提供的查询语句中,HQL是一种最广泛使用的查询方式

  ③ HQL语言支持:查询条件where、投影查询(仅查询类对象的部分属性)、分页查询、连接查询、分组查询(即可以使用group by /having by)、提供内置的聚集函数(sum/avg等)、支持子查询、支持动态绑定参数(即可以使用具名参数)、可调用用户定义的SQL函数和标准的SQL函数。

  ④HQL的检索步骤

  通过session建立一个Query对象(内含一个String类型的HQL查询语句),然后设置这个HQL查询语句的动态参数,然后执行Query对象的list()查询方法来执行查询操作即可。

  ⑤ 需要注意的是,Query对象的接口支持方法链编程风格,例如setXxx()方法返回的是这个Query实例的本身,而不是参数,所以可以调用方法链。

  ⑥ 需要注意的是,在参数绑定的时候可以分为按照参数的位置绑定(按照位置绑定时需要注意其实位置是0)和按照参数的名称绑定(按照名称说明在HQL语句中使用到了具名参数)

  ⑦ 在绑定参数时还需要注意如果参数类型是一个引用类型,那么我们需要使用setEntity()方法来进行参数的绑定。

  3.Hibernate的四个细节

  ① 分页查询

  何为分页,就是我每次查询只查询到在数据库中固定两个条目位置之间的数据,体现在页面上就成为了分页。

  我们可以两个方法来设置起始条目的位置--setFirstResult()和包含条目的数量setMaxResults()完成分页。

  ② 命名查询

  有时我们不希望在Java的源代码中进行HQL语句的修改,那么我们在hbm.xml中配置一个class节点的同级节点query来指定HQL语句,并且在应用程序中通过session.getNamedQuery()来通过query节点的name属性来创建一个query对象。

  ③ 投影查询

  有时我们希望从数据库中获取一个对象的部分属性。从HQL语句当中我们可以得知list()方法返回的是一个数组对象的集合,即List<Object[]>,我们希望返回的是当前这个类对象的集合应该怎么做呢?

  那么首先需要在类中创建一个包含我们想要的属性的构造器,然后将使用这个构造器new出来的对象放入HQL的select语句的查询内容中即可,这样就可以使用List<对象类型>来接收list()方法返回的值。

  ④ 报表查询

  报表查询的意思就是可以使用何种分组函数和聚集函数。如查询各个部分的最低工资和最高工资。

 











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值