简单总结一下。
1、if。类似于java中if。test中写条件
select * from user
where 1=1
<if test="sex !=null and sex!=''">
and sex =#{sex}
</if>
<if test="username !=null and username !=''">
and username like '%${username}%'
</if>
2、where。mysql中的添加查询条件。可以自动去除一个and、or关键词
select * from user
<where>
<if test="sex !=null and sex!=''">
and sex =#{sex}
</if>
<if test="username !=null and username !=''">
and username like '%${username}%'
</if>
</where>
3、foreach。循环。
separator:遍历对象之间需要拼接的字符串
open:拼接开头部分。
close:拼接结束部分。
collection:循环的集合
item:每次遍历生成的对象
select * from user
<where>
id in
<foreach collection="idList" separator="," open="(" close=")"
item="id">
#{id}
</foreach>
</where>
<!-- 最后输出形式
select * from user WHERE id in ( ? , ? , ? )
-->
4、sql。sql片段
有时候一个判断或其他sql多次用到,为了增加代码重用行,简化代码。添加一个代码片段。其他地方可以直接调用。
<sql id="sexV">
<if test="sex !=null and sex!=''">
and sex =#{sex}
</if>
</sql>
select * from user
<where>
<include refid="sexV"></include>
<if test="username !=null and username !=''">
and username like '%${username}%'
</if>
</where>
5、choose(when,otherwise) 语句
有时候我们只想用很多条件中的一个,满足一个条件即可。类似于java的switch。
select * from user
<where>
<choose>
<when test="username !=null and username !=''">
and username like '%${username}%'
</when>
<when test="sex !=null and sex!=''">
and sex =#{sex}
</when>
<otherwise>
and id=#{id}
</otherwise>
</choose>
</where>
6、set 语句
在做更新操作时。
update user
<set>
<if test="username != null and username != ''">
u.username = #{username},
</if>
<if test="sex != null and sex != ''">
u.sex = #{sex}
</if>
</set>
where id=#{id}
7、trim(where,set)标签
prefix:前缀
prefixoverride:去掉第一个and或者是or。
suffix:后缀
suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)
select * from user
<!--
<where>
<include refid="sexV"></include>
<if test="username !=null and username !=''">
and username like '%${username}%'
</if>
</where>
-->
<trim prefix="where" prefixOverrides="and | or ">
<include refid="sexV"></include>
<if test="username !=null and username !=''">
and username like '%${username}%'
</if>
</trim>