Mybatis映射器之update和delete元素解析
之前对select和insert元素进行了比较细致的解析,而update和delete两个元素相对来说比较简单,我们就放在一起来进行分析下。与insert元素一样,这两个元素在sql执行完后也会返回一个整数,表示执行影响的条数。
1. update
1.1 简单示例
简单的update示例:
<update id="update" parameterType="com.yhl.mybatis.model.Role">
update t_role
set role_name = #{roleName},note= #{note}
where id = #{id,jdbcType=BIGINT}
</update>
update的属性配置如下:
属性 | 描述 | 取值 | 默认 |
---|---|---|---|
id | 在这个模式下唯一的标识符,可被其它语句引用 | ||
parameterType | 传给此语句的参数的完整类名或别名 | ||
flushCache | 如果设为true,则会在每次语句调用的时候就会清空缓存。select 语句默认设为false | true/false | false |
useCache | 如果设为true,则语句的结果集将被缓存。select 语句默认设为false | true/false | false |
timeout | 设置驱动器在抛出异常前等待回应的最长时间,默认为不设值,由驱动器自己决定 | 正整数 | 未设置 |
fetchSize | 设置一个值后,驱动器会在结果集数目达到此数值后,激发返回,默认为不设值,由驱动器自己决定 | 正整数 | 驱动器决定 |
statementType | statement、preparedstatement、callablestatement。预准备语句、可调用语句 | STATEMENT、PREPARED、CALLABLE | PREPARED |
1.2 使用场景
批量更新情况
如下sql;
<update id="updateBatch" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
update t_role
<set>
role_name=${item.roleName}
</set>
<set>
note = ${item.note}
</set>
where id = ${item.id}
</foreach>
</update>
更新多条记录的同一个字段
<update id="updateRoles" parameterType="java.util.List">
update t_role set note = 'batch' where id in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
2. delete元素
简单的示例:
<delete id="deleteRole" parameterType="java.lang.Long">
DELETE FROM t_role WHERE id = #{id}
</delete>