在使用ibatis的时候,我们可以开启他自带的缓存,在实际使用中,我在sqlmap-config.xml 中一直有设置
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="512"
maxSessions="64"
maxTransactions="50"
useStatementNamespaces="true"
/>
之前一直没细看,这个cacheModelEnable='true'具体指什么,今天总算有点了解了。
在我们设置 cacheModelsEnabled="true" 的时候,就是指我们启用了 mapping文件(****sqlMap.xml)的缓存,
!!!然后,我们就可以 在xml(eg:ebooksqlMap.xml)中设置<cacheModel></cacheModel>了
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="EBook"> <typeAlias alias="ebook" type="com.portal.domain.EBook" /> <cacheModel id="ebook-cache" type ="LRU" readOnly="true" serialize="false"> <flushInterval hours="24"/> <flushOnExecute statement="EBook.create"/> <flushOnExecute statement="EBook.update"/> <property value="500" name="size"/> </cacheModel> <resultMap id="ebookResult" class="ebook"> <result property="id" column="ID" /> <result property="identifier" column="IDENTIFIER" /> <result property="coverUrl" column="COVERURL" /> <result property="title" column="TITLE" /> <result property="creator" column="CREATOR" /> <result property="publishDate" column="PUBLISHDATE" /> <result property="publisher" column="PUBLISHER" /> <result property="isbn" column="ISBN" /> <result property="bookStatus" column="BOOKSTATUS" /> <result property="importDate" column="IMPORTDATE" /> <result property="upBookDate" column="UPBOOKDATE" /> <result property="downBookDate" column="DOWNBOOKDATE" /> <result property="abstractInfo" column="ABSTRACTINFO" /> <result property="copyNumber" column="COPYNUMBER" /> <result property="catalog" column="CATALOG" /> <result property="subject" column="SUBJECT" /> <result property="orderLoc" column="ORDERLOC" /> <result property="price" column="PRICE" /> <result property="discountprice" column="DISCOUNTPRICE" /> </resultMap> <!-- 用于select查询公用抽取的列 --> <sql id="commonColumns"> <![CDATA[ ID, IDENTIFIER, COVERURL, TITLE, CREATOR, PUBLISHDATE, PUBLISHER, ISBN, BOOKSTATUS, IMPORTDATE, UPBOOKDATE, DOWNBOOKDATE, ABSTRACTINFO, COPYNUMBER, CATALOG, SUBJECT, ORDERLOC, PRICE, DISCOUNTPRICE ]]> </sql> <insert id="create" parameterClass="ebook" > <![CDATA[ INSERT INTO P_EBOOK ( IDENTIFIER, COVERURL, TITLE, CREATOR, PUBLISHDATE, PUBLISHER, ISBN, BOOKSTATUS, IMPORTDATE, UPBOOKDATE, DOWNBOOKDATE, ABSTRACTINFO, COPYNUMBER, CATALOG, SUBJECT, ORDERLOC, PRICE, DISCOUNTPRICE ) VALUES ( #identifier# , #coverUrl# , #title# , #creator# , #publishDate# , #publisher# , #isbn# , #bookStatus# , #importDate# , #upBookDate# , #downBookDate# , #abstractInfo# , #copyNumber# , #catalog# , #subject# , #orderLoc# , #price# , #discountprice# ) ]]> </insert> <sql id="dynamicWhere"> <dynamic prepend="where"> <isNotEmpty prepend="AND" property="id"> ID = #id# </isNotEmpty> <isNotEmpty prepend="AND" property="identifier"> IDENTIFIER = #identifier# </isNotEmpty> </dynamic> </sql> <select id="loadByObject" resultMap="ebookResult"> SELECT <include refid="commonColumns" /> <![CDATA[ FROM P_EBOOK WHERE IDENTIFIER = #identifier# ]]> </select> <select id="loadById" parameterClass="int" resultMap="ebookResult"> SELECT <include refid="commonColumns" /> <![CDATA[ FROM P_EBOOK WHERE ID = #id# ]]> </select> <select id="list-count" resultClass="int" cacheModel="ebook-cache"> <![CDATA[ select count(*) from P_EBOOK ]]> <include refid="dynamicWhere" /> </select> <!-- 分页查询 --> <select id="list" resultMap="ebookResult" cacheModel="ebook-cache"> <![CDATA[ SELECT * FROM P_EBOOK ]]> <include refid="dynamicWhere" /> <![CDATA[ ORDER BY ORDERLOC LIMIT #pageStart#,#pageSize# ]]> </select> <update id="update" parameterClass="ebook"> <![CDATA[ UPDATE P_EBOOK SET]]> <dynamic prepend=" "> <isNotEmpty prepend="," property="orderLoc"> ORDERLOC = #orderLoc# </isNotEmpty> </dynamic> <![CDATA[ WHERE ID = #id# ]]> </update> </sqlMap>
tips1:这里的 <flushOnExecute statement="EBook.create"/> 我使用的是 需要命名空间,so,需要是【命名空间.****】
tips2:ibatis 的缓存不需要额外的jar,基础的jar就足够了 ibatis-2.3.0.667.jar
其他 各个参数的意义,一般解释的都有,这里不做过多描述.