最近工作碰到需求,关于w级别list数据落地数据库,网上也有很多,这边笔者推荐个看起来优雅点的,直接上关键代码
list分片后批量插入数据库,注意的点就是解析后的sql长度大小,所以分片的大小也跟着这个走。
Mapper
void createList(@Param("list") List<User> user);
<insert id="createList" parameterType="entity.user">
insert into
`User`
(
`id`,
username,
)
values
<foreach collection="list" item="item" open="" separator="," close="">
(
#{item.id, jdbcType=VARCHAR},
#{item.userName, jdbcType=VARCHAR},
)
</foreach>
</insert>
Serevice
import org.apache.commons.collections4.ListUtils;
@Autowired
UserMapper userMapper
ListUtils.partition(tableList,50).stream().forEach(userMapper :: createList);
关于::解释:就是遍历出来的对象都去掉类里的方法(类::方法)