ibatis缓存

1.ibatis中使用缓存

首先设置SqlMapConfig.xml中<settings/>节点的属性cacheModelsEnabled="true"

然后在具体sqlmap文件中书写<cacheModel>

Xml代码

<cacheModelid="product-cache"type="LRU">

<flushIntervalhours="24"/>

<flushOnExecutestatement="insertProduct"/>

<flushOnExecutestatement="updateProduct"/>

<flushOnExecutestatement="deleteProduct"/>

<propertyname="size"value="1000"/>

</cacheModel>

最后给<select/>节点应用cache

Xml代码

<selectid="getAllProducts"cacheModel="product-cache">

select*fromPRODUCT

</statement>

复杂点的用法

Xml代码

<cacheModel/>节点

type="LRU"

type属性可以指定cache的类型,ibatis支持3种缓存:

MEMORY没有统一的对象重用模式或内存不足的应用。

LRU经常使用的对象,这是性能最好的选择。

FIFO在短时间内持续引用,而后很可能不再使用。

也可以使用外部cache如:

type="OSCACHE"

readOnly="true"

默认true时缓存效果最好,可以减少更新。

serialize="false"

默认false,设true可以提高整体应用的性能。

serialize只能应用于实现了Serializable接口的对象,而且和lazyLoadingEnabled="true"属性冲突。

flushInterval

自动刷新间隔时间。

flushOnExecute

在特定id的操作后,刷新cache,可选操作。

手动刷新缓存

[sqlmap].flushDataCache("product-cache")

刷新cache当id="product-cache"

[sqlmap].flushDataCache()

刷新sqlmap内的所有cache

2.ibatis拼接sql语句,动态查询

在ibatis中使用安全的拼接语句,动态查询

ibatis比JDBC的优势之一,安全高效

说明文字在注释中

Xml代码

<selectid="selectAllProducts"parameterclass="Product"resultMap="ProductResult">

selectid,notefromProduct

<dynamicprepend="WHERE">

<!--isNotNull判断参数是否存在,Integer类型-->

<isNotNullproperty="id">

<!--isGreaterThan判断参数是否大于compareValue,isGreaterEquals是大于等于-->

<isGreaterThanprepend="and"property="id"compareValue="0">

id=#id#

</isGreaterThan>

</isNotNull>

<!--isNotEmpty判断字串不为空,isEmpty可以判断字串为空-->

<isNotEmptyprepend="and"property="note">

<!--模糊查询不能用#,#在是用prepareStatement的?插入参数,$是文本替换-->

notelike'%$note$%'

</isNotEmpty>

</dynamic>

</select>

用Map传参数

Xml代码

<selectid="selectAllProducts"parameterclass="java.util.HashMap"resultMap="ProductResult">

selectid,notefromProduct

<dynamicprepend="WHERE">

<!--isPropertyAvailable判断属性是否有效-->

<isPropertyAvailableproperty="id">

<isNotNullproperty="id">

<!--isLessThan判断参数是否小于compareValue,isLessEquals是小于等于-->

<isLessThanprepend="and"property="id"compareValue="10">

id=#id#

</isLessThan>

</isNotNull>

</isPropertyAvailable>

</dynamic>

</select>

---------------------------------几个常用属性----------------------------------

Xml代码

<isPropertyAvailable>属性是存在

<isNotPropertyAvailable>属性不存在

<isNull>属性值是null

<isEmpty>判断Collection.size<1或String.length()<1

<isEqual>等于

<isNotEqual>不等于

<isGreaterThan>大于

<isGreaterEqual>大于等于

<isLessThan>小于

<isLessEqual>小于等于

相关推荐