Hibernate的load()、get()、list()、iterator()办法的差异guojizaixian - 超凡娱乐

Hibernate的load()、get()、list()、iterator()办法的差异guojizaixian

2019-02-14 09:37:18 | 作者: 运珹 | 标签: 办法,数据库,目标 | 浏览: 1438

开发中,通常是经过两种办法来履行对数据库的查询操作的。一种办法是经过ID来取得独自的Java目标,另一种办法是经过HQL句子来履行对数据库的查询操作。下面就别离结合这两种Hibernate查询办法来阐明一下缓存的效果。

经过ID来取得Java目标能够直接运用Session目标的load()或许get()办法,这两种办法的差异就在于对缓存的运用上。 下面咱们来详细看看Hibernate查询办法的完成。

load()办法

在运用了二级缓存的状况下,运用load()办法会在二级缓存中查找指定的目标是否存在。

在履行load()办法时,Hibernate首要从当时Session的一级缓存中获取ID对应的值,在获取不到的状况下,将根据该目标是否装备了二级缓存来做相应的处理。

如装备了二级缓存,则从二级缓存中获取ID对应的值,如依然获取不到则还需求根据是否装备了推迟加载来决议怎么履行,如未装备推迟加载则从数据库中 取。在从数据库获取到数据的状况下,Hibernate会相应地填充一级缓存和二级缓存,如装备了推迟加载则直接回来一个署理类,只要在触发署理类的调用 时才进行数据库的查询操作。

在Session一向翻开的状况下,并在该目标具有单向相关保护的时分,需求运用相似Session.clear(),Session.evict()的办法来强制改写一级缓存。

get()办法

get()办法与load()办法的差异就在于不会查找二级缓存。在当时Session的一级缓存中获取不到指定的目标时,会直接履行查询句子从数据库中取得所需求的数据。

在Hibernate查询办法中,能够经过HQL来履行对数据库的查询操作。详细的查询是由Query目标的list()和iterator()办法来履行的。这两个办法在履行查询时的处理办法存在着必定的不同,在开发中应该根据详细的状况来挑选适宜的办法。

list()办法

在履行Query的list()办法时,Hibernate查询办法是首要查看是否装备了查询缓存,如装备了则从查询缓存中寻觅是否现已对该查询进 存,如获取不到则从数据库中进行获取。从数据库中获取到后,Hibernate将会相应地填充一级、二级和查询缓存。如获取到的为直接的成果集,则直接返 回,如获取到的为一些ID的值,则再根据ID获取相应的值(Session.load()),最终构成成果集回来。能够看到,在这样的状况下,list ()办法也是有或许形成N次查询的。

查询缓存在数据发作任何改变的状况下都会被主动清空。

iterator()办法

Query的iterator()办法处理查询的办法与list()办法是不同的,它首要会运用查询句子得到ID值的列表,然后再运用Session的load()办法得到所需求的目标的值。

在获取数据的时分,应该根据这4种获取数据办法的特点来挑选适宜的办法。在开发中能够经过设置show_sql选项来输出Hibernate所履行的SQL句子,以此来了解Hibernate查询办法是怎么操作数据库的

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2

    oracle权限传递tengxun

    权限,用户,时分
  • 3
  • 4
  • 5

    主题:ORACLE函数大全sohu

    字符串,字符,函数
  • 6

    数据库备份问题huabian

    数据库,备份,数据
  • 7

    MySQL刺进数据报错处理sina

    文件,目录,数据库
  • 8

    mysql计算句子ITeye头条

    数据,汇总,季度
  • 9

    zz 彻底卸载mysqlITeyeitjob

    目录,数据库,问题
  • 10