上代碼(Service和ServiceImpl 省略):
1. 批量插入:
Mapper層:
int insertList(List<UsersModel> list);
對應的mapper.xml:
<!--批量插入資訊-->
<insert id="insertList" parameterType="java.util.List">
insert into users(
id, name
)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}
)
</foreach>
</insert>
如果List資料量比較大,可以考慮将List分批次插入
2. 批量更新:
批量更新隻提供更新單個字段的,因為更新多個字段無論哪種批量更新方案,我都用起來很不舒服,是以不做提供。
Mapper層:
int updateList(List<AgentApply> list);
對應的mapper.xml:
<!--批量更新-->
<update id="updateList" parameterType="java.util.List">
update agent_apply
set apply_time=
<foreach collection="list" item="item" index="index"
separator=" " open="case" close="end">
when id=#{item.id} then #{item.applyTime}
</foreach>
where id in
<foreach collection="list" index="index" item="item"
separator="," open="(" close=")">
#{item.id,jdbcType=INTEGER}
</foreach>
</update>
3. 批量删除:
PS:一般查詢出來的List都是包含對象在裡面的,那麼怎麼清理出單獨包含ID的list呢?
可以參考下面方式,第一個listData是從資料庫查詢出來的list資料,每個元素都是一個對象;
然後單獨把裡面每個元素的id給取出來放入新的list(ids)。
List<AgentRechargeOrder> listData = agentRechargeOrderServiceImpl.getListByXXXX(XXXX);
List<Integer> ids = listData.stream().map(AgentRechargeOrder::getId).collect(Collectors.toList());
如果不想清除出單獨的id的list,直接傳整個List也是可以的, 這樣mapper層傳值就改成對應的包含對象的List即可。
Mapper層:
int deleteMany(List<Integer> ids);
對應的mapper.xml:
<delete id="deleteMany">
delete from agent_recharge_order where id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large