条件分支SQL
这里 user 默认为 传入的对象 ,name,age,sex 为User 的属性
user_name, user_age, user_sex 为数据库表的字段名
- where
- if
<select id="selectUser">
select * from 表名
<where>
<if test="name != null">
user_name = #{userName}
</if>
<if test="age != null">
and user_age = #{age }
</if>
<if test="sex != null">
and user_sex = #{sex }
</if>
</where>
<!-- 在这里只要if条件满足就会加上相应的语句 -->
</select>
在《where》标签里面 最自动将 where后把 and 或 or 去掉,避免出现sql语法错误
- choose&when&otherwise
<select id="selectUser">
select * from 表名
<where>
<choose>
<when test="name != null">
user_name = #{userName}
</when>
<when test="age != null">
and user_age = #{age }
</when>
<otherwise>
and user_sex = #{sex }
</otherwise>
</choose>
</where>
<!-- 在choose标签里面只要if条件满足就会加上相应的语句,同时不会在进行后续的判断。但是如果when 条件都不满足,就会执行otherwise -->
</select>
循环SQL
- forEach
<select id="selectUser">
select * from 表名
<where>
<foreach collection="list" item="user" separator="," open="age in (" close=")">
#{age}
</foreach>
</where>
<!-- 在foreach标签内可以设置如下参数
collection 为遍历集合的类型
index 默认为遍历的下标,在collection为map类型中为key
item 默认为每次遍历的值,在collection为map类型中为value
separator 每次循环间隔以什么分隔
open 在遍历开始的时候自动为你添加代码
close 在遍历结束的时候自动为你添加代码
-->
</select>
其他特殊SQL
- where
如上所示,where标签会自动帮你添加 where关键字,如果where 内所写条件皆不满足,就不会给sql语句添加where关键字,并且会自动帮你去除多余的and 或 or。 - set
set为动态更新数据更加方便。
<update id="updateUser">
update 表名
<set>
<if test="name != null">name=#{name},</if>
<if test="age != null">age=#{age},</if>
<if test="sex != null">sex=#{sex},</if>
</set>
where id=#{id}
</update >