背景:做一个排行榜,由于网站访问量很大,为了避免每次都直接访问数据库,所以采用缓存策略
目前我们采用IBatis作ORM, 所以我们直接使用了IBatis 自带的缓存解决方案。当然你也可以定制,我在我的一篇文章 可复用、扩展的缓存设计方案也谈到了如何定制 ,个人认为如果不是非常复杂的需求,完全可以借助ORM自带的方案.你会发现非常非常简单.
下面我们进入实战:
step1)写ibatis的相关配置
<?
xmlversion="1.0"encoding="UTF-8"
?>
<!
DOCTYPEsqlMapPUBLIC"-//iBATIS.com//DTDSQLMap2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd"
>

<
sqlMap
namespace
="specialtopic"
>

............
<
cacheModel
id
="getTopVideoListByColumn1-cache"
type
="OSCACHE"
>
<
flushInterval
seconds
="60"
/>
</
cacheModel
>


............

<
statement
id
="getTopVideoListByColumn1"
resultMap
="top-Video-column1"
cacheModel
="getTopVideoListByColumn1-cache"
>
selectv.videoId,v.title,v.timeSpan,tu.loginName,vr.viewedCount
fromtop_baby_videotbv
innerjoinvideovontbv.videoId=v.videoId
innerjoinvideo_reportvronv.videoId=vr.videoId
innerjointvUsertuonv.tvUserId=tu.tvUserId
</
statement
>

</
sqlMap
>
显而易见上面的cacheModel是缓存策略, 只需加在statement段的属性中即可
step2)写dao方法
public
ListgetTopVideoListByColumn1()
...
{
Listlist=this.getSqlMapClientTemplate().queryForList("getTopVideoListByColumn1",
null);
returnlist;
}
就是这么简单,从客户端的角度看,缓存是透明的.你可以从配置文件修改你的缓存策略,不会对你的java代码造成任何影响.
目前我们采用IBatis作ORM, 所以我们直接使用了IBatis 自带的缓存解决方案。当然你也可以定制,我在我的一篇文章 可复用、扩展的缓存设计方案也谈到了如何定制 ,个人认为如果不是非常复杂的需求,完全可以借助ORM自带的方案.你会发现非常非常简单.
下面我们进入实战:
step1)写ibatis的相关配置






............






............











显而易见上面的cacheModel是缓存策略, 只需加在statement段的属性中即可
step2)写dao方法







就是这么简单,从客户端的角度看,缓存是透明的.你可以从配置文件修改你的缓存策略,不会对你的java代码造成任何影响.