mapper接口
int dynamicUpdateTable(@Param("table") Map<String, Object> table);
xml写法(因为我每个表的id名字都不一样,所以加了个参数idName)
<update id="dynamicUpdateTable" parameterType="map">
<![CDATA[UPDATE ${table.tabName} SET]]>
<foreach item="value" index="key" collection="table.entrySet()" separator=",">
<if test="key!='tabName' and key!='id' and key!='idName'">
<![CDATA[${key}=${value}]]>
</if>
</foreach>
<![CDATA[ WHERE ${table.idName}=${table.id};]]>
</update>
传入参数
Map<String, Object> table = new HashMap<>();
table.put("tabName", "member_info");
table.put("idName", "m_id");
table.put("id", 1);
table.put("name", "\"Henry01\"");
table.put("email", "\"xxx@163.com\"");
table.put("gender", 0);
System.out.println(mapper.dynamicUpdateTable(table));
注意事项
- 全部用
$
,用#
会报错?=?
- 传入字符类型的话,应该在map里提前给参数加上双引号,比如
table.put("name", "\"Henry01\"");
- 类似
${table.idName}=${table.id}
这个,不要写成${table.idName} = ${table.id}
不要在等号两边加空格,否则会报错(鬼知道为什么,因为我听说等号两边加空格是文明人的写法) - 人见人爱的颜色