1.where
1.如果<where>
中有类容则生成where子句,如果没有类容则什么也不做。
2.如果<where>
子句中有and则删除第一个and。
<select id="selAll" resultType="Loge">
select *from loge
<where>
<if test="accin != null and accin != ''">
and accin=#{accin}
</if>
<if test="accout != null and accout != ''">
and accout=#{accout}
</if>
</where>
</select>
2.choose、when、otherwise
choose中的条件只会有一个被执行,剩余的都不会执行
这三者最好同时使用
<select id="selAll" resultType="Loge">
select *from loge
<where>
<choose>
<when test="accin != null and accin != ''">
and accin=#{accin}
</when>
<when test="accout != null and accout != ''">
and accout=#{accout}
</when>
<otherwise>
and featured = 1
</otherwise>
</choose>
</where>
</select>
3.set
作用:去掉最后一个逗号,一般用于更新语句中
如果set里面有类容则生成set关键字,没有则不生成
<update id="upd" parameterType="log">
update loge
<set>
id=#{id}------》//防止SQL语法错误,set里面没有类容时会不生成set关键字
<if test="accin != null and accin != ''">
accin=#{accin},
</if>
<if test="accout != null and accout != ''">
accout=#{accout},
</if>
</set>
</update>
4.trim
prefix表示前面添加元素,prefixOverrides表示前面删除一个元素
suffix在后面添加元素,suffixOverrides在后面删除一个元素
<trim prefix="WHERE" prefixOverrides="AND |OR ">
...
</trim>
5.bind
bind 元素允许你在 OGNL 表达式以外创建一个变量,并将其绑定到当前的上下文
一般用与模糊查询
<select id="selectBlogsLike" resultType="Blog">
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
SELECT * FROM BLOG
WHERE title LIKE #{pattern}
</select>
5.foreach
动态 SQL 的另一个常见使用场景是对集合进行遍历(尤其是在构建 IN 条件语句的时候)。
<select id="selectPostIn" resultType="domain.blog.Post" parameterType="list">
SELECT *
FROM POST P
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
6.动态引入SQL
一般用于多表联合查询
<select id="">
select
<include refid="mysql"></include>
from loge
</select>
<sql id="mysql">
id,name,sex
</sql>