SSM(set、foreach、sql代码片段)
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"/>