Mybatis 遍历(二)

最近碰到了关于mybatis遍历的需求:

总结一下:

当传入参数是Map map这种类型时,
执行Select操作
假设传入某个参数为:Map<"userList", List uesr> map
map类型遍历: collection 填入需要遍历Map指定的key
其sql为:
select * from userinfo where id= ? and name in (?, ?)
执行update操作

如果是map类型,和上述一样
如果是List类型:
Mybatis批量update有两种

假设传入参数为: List userList
1.执行多条SQL
update userinfo set name= #{item.name} where id=#{item.id}

执行出来的sql大概是这样的:
update userinfo set name= ? where id=?;update userinfo set name= ? where id=?
但是执行这个多语句更新有几点需要注意:
1.执行效率低下,尤其在数据量比较大的情况
2.非要用这种方法的也可以,要在url上加上:&allowMultiQueries=true 主要针对Mysql数据库

2.使用单条sql批量更新
update userinfo
when id=#{item.id} then #{item.name}
when id=#{item.id} then #{item.address}
where id in
#{item.id}

转换成sql大概是:
UPDATE userinfo
    SET name = CASE
        WHEN id = ? THEN ?
        WHEN id = ? THEN ?
    END,
set address = case
WHEN id = ? THEN ?
        WHEN id = ? THEN ?
    END
WHERE id IN (?,?,?)

插入遍历:都差不多,写个例子体会下

insert into userinfo (id, name, address)
(#{item.id},#{item.name},#{item.address})

你可能感兴趣的:(Mybatis)