1、<iterate>:这属性遍历整个集合,并为List集合中的元素重复元素体的内容。
Iterate的属性:
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property - 类型为java.util.List的用于遍历的元素(必选)
open - 整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction - 每次遍历内容之间的字符串,用于定义AND或OR(可选)
<iterate prepend=”AND” property=”userNameList” open=”(” close=”)” conjunction=”OR”> username=#userNameList[]# </iterate> = and (username=name1 or username=name2...)
注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String。
2、一元条件元素的属性:
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property - 被比较的属性(必选)
<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)。
例子:
<isNotEmpty prepend=”AND” property=”firstName” >
FIRST_NAME=#firstName#
</isNotEmpty>
3、下面是一个简单的例子(News.xml)
<?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="News">
<!-- 定义别名,为要映射的包.类名,定义一个别名,方便使用 -->
<typeAlias alias="News" type="com.lewis.News" />
<!-- 定义公共常量 -->
<sql id="selectSql">
<![CDATA[
SELECT ID,
TITLE,
CONTENT,
CREATETIME
FROM NEWS
]]>
</sql>
<!-- 按指定的ID集合查询 -->
<select id="getByIds" parameterClass="java.util.List"
resultClass="News">
<include refid="selectSql" />
<dynamic>
<iterate open="WHERE ID IN (" close=")" conjunction=",">
#list[]#
</iterate>
</dynamic>
</select>
<!-- 按某一个Id查找 -->
<select id="get" parameterClass="java.lang.String" resultClass="News">
<include refid="selectSql" />
WHERE ID=#value#
</select>
<!-- 查找数量 -->
<sql id="selectCountSql">
SELECT COUNT(ID) FROM NEWS
</sql>
<!-- 查找所有news -->
<select id="searchNewsList" resultClass="News">
<include refid="selectSql" />
ORDER BY TITLE
</select>
<!-- 添加操作 -->
<insert id="insert" parameterClass="News">
INSERT INTO NEWS(
ID
<dynamic prepend="">
<isNotNull prepend="," property="title">
TITLE
</isNotNull>
<isNotNull prepend="," property="content">
CONTENT
</isNotNull>
<isNotNull prepend="," property="createtime">
CREATETIME
</isNotNull>
</dynamic>
)
VALUES(
#id#
<dynamic prepend="">
<isNotNull prepend="," property="title">
TITLE
</isNotNull>
<isNotNull prepend="," property="content">
CONTENT
</isNotNull>
<isNotNull prepend="," property="createtime">
CREATETIME
</isNotNull>
</dynamic>
)
</insert>
<!-- 删除操作 -->
<delete id="delete" parameterClass="java.lang.String">
DELETE FROM NEWS
WHERE ID
= #value#
</delete>
<!-- 更新操作 -->
<update id="update" parameterClass="News">
UPDATE NEWS
<dynamic prepend="set">
<isNotNull prepend="," property="title">
TITLE = #title#
</isNotNull>
<isNotNull prepend="," property="content">
CONTENT = #content#
</isNotNull>
<isNotNull prepend="," property="createtime">
CREATETIME = #createtime#
</isNotNull>
</dynamic>
WHERE ID = #Id#
</update>
</sqlMap>