JCS就是一个通用的对象缓冲,Hibernate可以使用JCS来缓冲查询结果集。如果要对一个持久对象做缓冲,就是在hbm的class标签前面加一行:
<jcs-cache usage="read-only"/>
<jcs-cache usage="read-write"/>
这是一个只读缓冲,只对Read操作做缓冲,也可以用read-write,对update也进行缓冲,不过不能用在集群环境中。
例如:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="com.fankai.Cat" table="cat">
<jcs-cache usage="read-only"/>
<id name="id" unsaved-value="null">
<generator class="uuid.hex"/>
</id>
<property name="name" length="16" not-null="true"/>
<property name="sex" length="1" not-null="true"/>
<property name="weight" />
</class>
</hibernate-mapping>
cache.ccf是JCS的配置文件,主要配置一下:
jcs.default.cacheattributes.MaxObjects=5000 (缓冲区容纳对象大小)
jcs.default.elementattributes.MaxLifeSeconds=240(最大缓冲时间)
除了对整个持久对象,也可以对对象的集合属性进行缓冲,那就是在property标签下面写就OK了。
第一次读取数据的时候,不论用List还是Iterator都会把数据填充到缓冲区内,以后碰到相同的查询结果,就不去数据库取,直接到JCS缓冲区取,但是只有Iterator才能去缓冲区取数据,List总是直接从数据库取,无法利用缓冲区。