mybatis插入多条数据,id自动为生成的uuid,传入的数据格式为map的解决方式

撸代码遇到过这种情况:

insert into user(id,user_name,user_age) values

(自动生成的uuid,"张三",18), (自动生成的uuid,"李四",19), (自动生成的uuid,"王五",20), (自动生成的uuid,"冯六",21)

使用 mybatis 该怎样实现呢?

首先 select replace(uuid(),'-','') from dual 这样 id 就为自动生成的32位uuid

由于字段 id  自动生成的,传入的时候可以不考虑.可以将传入的多个 user_name,user_age 的值封装成一个Map,

{"张三":"18, "李四":"19", "王五":"20", "冯六":"21"}

映射接口中

public interface User {

    int insert(@Param("mymap") Map<String, String> map);
}

一定要加注解 @Param,里面的值既为 xml 文件中的  
<foreach collection="mymap">内容

xml文件中

    <insert id="insert">
        insert into user(id,use_name,user_phone) values
        <foreach collection="mymap" item="item" separator="," index="key">
            ((select replace(uuid(), '-', '') as id from dual),
            #{key,jdbcType=VARCHAR},
            #{item,jdbcType=VARCHAR})
        </foreach>
    </insert>
另一种写法
    <insert id="insert">
        <selectKey keyProperty="id" resultType="java.lang.String" order="BEFORE">
            select replace(uuid(), '-', '') as id from dual
        </selectKey>
        insert into user(id,use_name,user_phone) values
        <foreach collection="mymap" item="item" separator="," index="key">
            (#{id},
            #{key,jdbcType=VARCHAR},
            #{item,jdbcType=VARCHAR})
        </foreach>
    </insert>

 index="key"就是传递过来的 mymap 中的 key
 item="item"就是其中的 value
 当传值为 list 时,index 代指foreach循环到的下标
一定要注意,插入时与查找时 foreach 属性不同,不含有 open , close 两种属性

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值