关于ibatis的缓存的

在使用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 

其他 各个参数的意义,一般解释的都有,这里不做过多描述.

多想,多试
原文地址:https://www.cnblogs.com/junyi0120/p/5336714.html