MyBatis根据ID数组批量更新值
⼀开始想到的⽅法
通过每⼀个id查出每⼀个实体,然后改变每⼀个实体⾥的值,再每⼀个调⽤更新⽅法更新。
这样会很慢很慢,⼀次删除操作可能要访问⼏百次数据库。
public int deleteCourseClassificationByIds(Long[] ids){
//获取删除⼈userId
long userId = UserId();
//⽤课程分类id查出课程分类实体
for(Long id : ids){
CourseClassificationEntity entity = courseClassificationMapper.selectCourseClassificationById(id);
//将逻辑删除字段和修改⼈更新
entity.setDeleteUserId(userId);
entity.setDeleteTime(new Date());
//调⽤更新操作
if(courseClassificationMapper.updateCourseClassification(entity)==0)
return0;
}
return1;
}
优化过的⽅法
直接通过⼀个map,把ID数组和需要更新的值全部传⼊update语句,然后在动态sql⾥⽤ in 进⾏范围更新。
public int deleteCourseClassificationByIds(Long[] ids){
批量更新sql语句Long userId = UserId();
HashMap map =new HashMap();
map.put("ids",ids);
map.put("userId",userId);
return courseClassificationMapper.updateByIds(map);
}
<!--批量逻辑删除-->
<update id="updateByIds"parameterType="map">
update sc_course_classification
<trim prefix="SET"suffixOverrides=",">
<if test="userId != null"> delete_user_id = #{userId} ,</if>
delete_time = now()
</trim>
where id in
<foreach item="id"collection="ids"open="("separator=","close=")">
#{id}
</foreach>
</update>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。