set标签:
set标签会自动去除最后一个满足条件的逗号,set和update进行联用。
<update id="updateIf" parameterType="user">
update user
<set> /*会自动加上set关键字 set也是可以自动加上 逗号 并且去掉 最后一个 逗号 */
<if test="username != null">
username = #{username},
</if>
</set>
<where>
<if test="id != null">
and id = #{id}
</if>
</where>
</update>
foreach标签:
select * from user where id in (1, 2, 3)
foreach解决的是id in (1, 2, 3), 这样的拼接关系。
open: 表示开始 一般是 (
close: 表示结束 一般是 )
collection: 参数是集合的时候写的是 list
item: 给当前遍历的元素起个别名
separator:每个元素用生命隔开 一般是逗号 ,
参数是集合:
select标签里面的parameterType写的是 list
collection里面写的是list
先去判断list是否为空然后再去进行拼接,这就要和咱们之前的<if>标签进行联用了。
<select id="findByList" parameterType="list" resultType="user">
select * from user
<where>
<if test="list != null">
id in
<foreach item="id" separator="," collection="list" close=")" open="(">
#{id}
</foreach>
</if>
</where>
</select>
参数是数组:
collection里面写的是array
先去判断数组是否为空,这也是和咱们之前的<if>标签联用了。为空的话,也就是查询全部了。
<select id="findByArray" parameterType="int" resultType="user">
select * from user
<where>
<if test="array != null">
id in
<foreach item="id" separator="," collection="array" close=")" open="(">
#{id}
</foreach>
</if>
</where>
</select>
sql片段:
发现查询的时候出现大量的 select * from user 但是当我这个user表名发生变化的时候,岂不是要修改很多的代码。代码片段 也就是把相同的代码提取出现。
<sql>标签,里面的id是唯一标识符,方便之后的调用。
<!--sql语句片段 抽取-->
<sql id="selectUser">
select * from user
</sql>
用的时候:
用include标签,然后refid里面填的是sql片段的id。
/*引用sql片段*/
<include refid="selectUser"/>