标签:
2.映射文件
2.1.example
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<!-- 定义该映射文件的Cache机制 -->
<cacheModel type="LRU" id="userCache">
<!-- 设定缓存存活的时间 -->
<flushInterval hours="24"/>
<!-- 设定指定的操作,清空缓存 -->
<flushOnExecute statement="updateUser"/>
<!-- 设定缓存的容量(对象) -->
<property name="size" value="1000"/>
</cacheModel>
<!-- 定义别名 -->
<typeAlias alias="user" type="com.wyq.pojo.User"/>
<!-- 通过缓存可以提高查询效率 -->
<select id="getUsers"
parameterClass="java.lang.Integer"
resultClass="user" cacheModel="userCache">
<!-- 采用!【DATA[]】格式,是为了避免sql重的字符与xml映射文件的合法性造成影响 -->
<![CDATA[
select id,name,sex from t_user
]]>
</select>
<update id="updateUser" parameterClass="user">
<![CDATA[
update t_user set name=#name#,sex=#sex# where id=#id#
]]>
</update>
<insert id="insertUser" parameterClass="user">
insert into t_user(name,sex) values(#name#,#sex#)
</insert>
<delete id="deleteUser" parameterClass="java.lang.String">
delete from t_user where id=#value#
</delete>
</sqlMap>
2.2.sqmlMap节点
namespace命名空间,与useStatementNamespaces配合使用。
2.3.cacheModel节点
缓存配置节点。应避免将那些占用较大内存的对象放置在此类高速缓存中,否则内存会很快耗尽。
2.3.1.id
便于为需要使用此高速缓存模型所配置的高速缓存的查询已映射语句使用。
type:缓存使用模型
1、MEMORY基于引用的高速缓存模型。直接将数据放进内存中,由GC负责管理,如果属性<property name="reference-type" value="WEAK"/>的值为WEAK、SOFT,GC将根据内存使用情况清理缓存如果该值为Strong,缓存将一直保存。
2、LRU 使用最近最少使用策略来管理高速缓存模型。该高速缓存的内部机制会在后台记录哪些对象最近最少使用,一旦超过高速缓存大小限制就会废弃它们。大小限制规定了高速缓存中可以存放的对象数目。
3、FIFO采用先进先出的管理策略,是一种基于时间的策略,使用于放置那些初放入时使用频率高、随时间流逝访问频率就会降低的对象。
2.3.2.readOnly
缓存是否只读,默认为true,效果好
true:只读。
false:可修改
2.3.3.serialize
是否深度复制,默认false,一般readOnly为true时,其值为false。
true:可以深度复制
false:不能深度复制
2.3.4.高速缓存的清除
使用flushOnExecute、flushInterval标签可以定义清空缓存触发条件
?<flushOnExecute>? 定义查询已映射语句,其执行将引起相关高速缓存的清除
?<flushInterval>??定义一个时间间隔,高速缓存将以此间隔定期清除
?<flushInterval>标签属性如下:
?? hours(可选)??? 每次清除高速缓存前应该经过的小时数
?? minutes(可选)??? 每次清除高速缓存前应该经过的分钟数
?? seconds(可选)??? 每次清除高速缓存前应该经过的秒数
?? milliseconds(可选)??? 每次清除高速缓存前应该经过的毫秒数?
2.4.查询语句节点
2.4.1.节点
2.4.1.1.sql节点
statement:通用节点,可以代替下面四种,有id、parameterClass、resultClass属性
select:查询节点,有id、parameterClass、resultClass属性
insert:插入节点,有id、parameterClass属性
update:更新节点,有id、parameterClass属性
delete:删除节点,有id、parameterClass属性
2.4.1.2.其他节点
1、dynamic是sql从属节点,有:
perpend: 可被覆盖的SQL语句组成部分,添加在语句的前面(可选).
2、dynamic从属节点:
a、二元条件元素:
<isEqual> ?比较属性值和静态值或另一个属性值是否相等。
?<isNotEqual> ?比较属性值和静态值或另一个属性值是否不相等。
?<isGreaterThan> ?比较属性值是否大于静态值或另一个属性值。
?<isGreaterEqual> ?比较属性值是否大于等于静态值或另一个属性值。
?<isLessThan> ?比较属性值是否小于静态值或另一个属性值。
?<isLessEqual> ?比较属性值是否小于等于静态值或另一个属性值。
二元条件属性:
perpend——可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property——是比较的属性(必选)
compareProperty——另一个用于和前者比较的属性(必选或选择compareValue)
compareValue——用于比较的值(必选或选择compareProperty)
b、一元条件元素:
<isPropertyAvailable> 检查是否存在该属性(存在parameter bean的属性)?
?<isNotPropertyAvailable> ?检查是否不存在该属性(不存在parameter bean的属性)
?<isNull> ?检查属性是否为null
?<isNotNull> ?检查属性是否不为null
?<isEmpty> ?检查Collection.size()的值,属性的String或String.valueOf()值,是否为null或空(“”或size() < 1)
?<isNotEmpty> ?检查Collection.size()的值,属性的String或String.valueOf()值,是否不为null或不为空(“”或size() > 0)
一元条件属性:
prepend——可被覆盖的SQL语句组成部分,添加在语句前面(可选)
property——被比较的属性(必选)
c、其他元素条件:
<isParameterPresent> ?检查是否存在参数对象(不为null)
?<isNotParameterPresent> ?例子:
<isNotParameterPresent prepend=”AND”>
EMPLOYEE_TYPE = ‘DEFAULT’
</isNotParameterPresent>
属性:prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
<iterate> 遍历类型为java.util.List的元素。
例子:
<iterate prepend="AND" ?property="userNameList"
open="(" close=")" conjunction="OR">
username=#userNameList[]#
</iterate>
注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String。?
Iterate的属性:
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选) property - 类型为java.util.List的用于遍历的元素(必选)
open - 整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction - 每次遍历内容之间的字符串,用于定义AND或OR(可选)
2.4.2.参数设置
2.5.其他
1、对于参数定义,尽量使用parameterClass,即直接将pojo作为statement的调用参数,如果输入的参数是java.util.map,那么map中的键值将作为输入参数,普通基本类型就是直接输入
2、对于返回结果而言,尽量也使用resultClass,直接将字段名与pojo相对应
3、用<![CDATA[? ]]>标记避免sql中与xml规范相冲突的字符对xml映射文件的合法性造成影响.
标签:
原文地址:http://www.cnblogs.com/cft11231/p/4729067.html