if判断,where判断
- User getById(Integer _parameter);
但是当 _parameter 为 null 时,此语句很可能报错或查询结果为空。此时我们使用 if 动态 sql 语句先进行判断,如果值为 null 或等于空字符串,我们就不进行此条件的判断,增加灵活性。
“where”标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以 AND 或OR 开头的,则它会剔除掉。
- if判断
<select id="getUsers" parameterType="int" resultType="User"> - SELECT id, name, phone, email FROM users WHERE 1=1
- <if test="_parameter != null">
- and id > #{_parameter}
- </if>
- </select>
where判断 - <select id="getUsers" parameterType="int" resultType="User">
- SELECT id, name, phone, email FROM users
- <where>
- <if test="_parameter != null">
- id > #{_parameter}
- </if>
- </where>
- </select>
大量重复的字段
- <sql id="HHHHH">
- id,name
- </sql>
- 引用写法
- <include refid="HHHHH"/>
foreach
1、item表示集合中每一个元素进行迭代时的别名,
2、index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
3、collection表示当前传递的list集合
4、open表示该语句以什么开始,
5、separator表示在每次进行迭代之间以什么符号作为分隔符,
6、close表示以什么结束,
- void updateBatch(List<E> list);
- <update id="updateBatch">
- <foreach item="item" index="index" collection="list" open=""
- close="" separator=";">
- <if test="item.statusType.toString() == 'DELETED'">
- DELETE FROM 库名.表名 WHERE id = #{item.id}
- </if>
- <if test="item.statusType.toString() != 'DELETED'">
- UPDATE 库名.表名
- <set>
- modifier = #{item.modifier,jdbcType=CHAR},
- <if test="item.account != null">
- account = #{item.account,jdbcType=VARCHAR},
- </if>
- <if test="item.name != null">
- name = #{item.name,jdbcType=VARCHAR},
- </if>
- </set>
- where
- 库名.表名.id =#{item.id}
- </if>
- </foreach>
- </update>
set
一定要非空判断
set为空会报错
set 标签元素主要是用在更新操作的时候,它的主要功能和 where 标签元素其实是差不多的,主要是在包含的语句前输出一个 set,然后如果包含的语句是以逗号结束的话将会把该逗号忽略,如果 set 包含的内容为空的话则会出错。有了 set 元素就可以动态的更新那些修改了的字段。
- <update id="updateFlow">
- UPDATE ufis.pid
- <set>
- <if test="used_flow != null">
- used_flow = used_flow + #{flow},
- </if>
- <if test="change_flow_time != null">
- change_flow_time = change_flow_time + #{change_flow_time},
- </if>
- </set>
- WHERE id = #{id}
- </update>