撸代码遇到过这种情况:
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 两种属性