if
动态 SQL 通常要做的事情是根据条件包含 where 子句的一部分
例如
<select id="list" resultMap="user" parameterType="cn.zwb.pojo.User">
select * from user
where
<if test="age!=null">
age= #{age}
</if>
<if test="name!=null">
name=#{name}
</if>
</select>
此时就是if的动态sql语句,但是呢如果条件都不符合的话sql语句为 select* from user where,显然这是错误的,那么就需要用到<where>标签,同时如果在if标签中sql语句上用了AND 会剔除掉,也就是说where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。
<select id="list" resultMap="user" parameterType="cn.zwb.pojo.User">
select * from user
<where>
<if test="age!=null">
age= #{age}
</if>
<if test="name!=null">
name=#{name}
</if>
</where>
choose, when, otherwise
这三个标签类似于java中switch,这里不再多讲看用法
<select id="list" resultMap="user" parameterType="cn.zwb.pojo.User">
select * from user
<where>
<choose>
<when test="age!=null">
age= #{age}
</when>
<when test="name!=null">
name=#{name}
</when>
<otherwise>
name='13'
</otherwise>
</choose>
</where>
</select>
set
同时也有类似于where的标签<set>,设置值,它横向替代了set关键字,但是它会在前面自动加入"set"和最后删除","
trim
这个就是可以定制删除头或尾部的标签,
例如实现where标签
<trim prefix="WHERE" prefixOverrides="AND |OR "> ... </trim>
又或者实现set标签
<trim prefix="SET" suffixOverrides=","> ... </trim>
foreach
如果我们在传入list集合需要插入多条数据就可以使用此标签来完成
<select id="selectPostIn" resultType="domain.blog.Post"> SELECT * FROM POST P WHERE ID in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>