list: 结果存入缓存,但不从缓存里面取;查询时属性连同id一起找出来,只有“一句”select;
iterate:结果存入缓存,并在缓存中查找结果;查询时先找出所有的 id,然后根据 id 到缓存里面查找,如果没有命中,再到数据库中查找该id对应的其他属性。可能会有多行 select。
分页:firstResult 与 maxResult 的影响。
Oracle:支持 rownum <= 的写法,因此在返回的结果集大小上对="" list="" 和="" iterate="" 都是一样的。但="" maxresult="" 比较大时对使用="" list="" 较为有利(不考虑缓存),因为="" iterate="" 是要按="" id="" 进行多次查找的。="" 对于不支持部分结果集的数据库,必须返回所有结果(?)。这个时候,list="" 可能会消耗大量的内存并导致效率降低。iterate="" 因为只是="" 返回所有id,相对较好。="" 不过如果是大数据量的应用,应该还是要用支持部分结果集的数据库。="" 如果使用二级缓存且缓存命中率较高(数据经常使用,并且较少更新),此时可以使用="">=>
1、jcs(java caching system)是一个对象cache,它可以把java对象缓存起来,提高那些访问频率很高的java对象的存取效率。jcs是按照对象的唯一标示来存取对象的,比如说可以按照对象的 hashcode来存取。
2、对于hibernate来说,可以利用jcs来缓存查询结果,这样当下次访问同样的数据,就无须去数据库取,直接从jcs中取出来,加快了查询速度。
3、当hibernate使用list或者iterator方式来第一次读取数据的时候,jcs是空的,此时不管是list方式还是iterator方式都会往jcs里面填充查询出来的持久对象,
例如: select c from cat as c
而 select c.id, c.name from cat as c 这种hql语句不构造po,因此不会去填充jcs。
4、从jcs中区数据:
从jcs中取数据是按照对象的唯一标示来存取的,而对于po持久对象来说,唯一标示就是主键,因此hibernate首先必须获得主键列表,然后根据主键列表挨个判定,看这个持久对象究竟是在jcs里面还是在数据库里面,假如在jcs里面,那么按照主键取,假如在数据库,那么发送sql取。
5、这里先介绍一下iterator可以使用jcs,而list不能。上面说了,用jcs之前,要先获得持久对象的主键,才能去jcs里面取持久对象,而获得主键列表必须去数据库中取得,这一步是没有办法缓冲的。
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....