mybatis更新时动态传入表名及字段注意事项

本文介绍了在使用Mybatis进行动态更新时如何处理表名和字段的问题,特别是在mapper接口和XML配置中。文章指出,由于不同表的ID名称可能不同,需要传入额外的参数idName。同时,强调了在传入参数时,如果使用Map,应确保字段值带有双引号,并避免在等号两侧添加空格,以防止出现错误。最后,作者分享了一个示例代码片段,帮助读者理解正确的写法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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));

注意事项

  1. 全部用$,用#会报错?=?
  2. 传入字符类型的话,应该在map里提前给参数加上双引号,比如table.put("name", "\"Henry01\"");
  3. 类似${table.idName}=${table.id}这个,不要写成${table.idName} = ${table.id}不要在等号两边加空格,否则会报错(鬼知道为什么,因为我听说等号两边加空格是文明人的写法)
  4. 人见人爱的颜色
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值