批量删除mybatis多参数效率比较

牧云@^-^@ 提交于 2020-08-14 16:08:26

最近遇到批量删除表数据的问题并且是根据多个参数,我这个情况是有一个参数比较特殊是一样的值,但是我还是把它作为通用情况。做了实验测试。

代码测试如下:

Map param =new HashMap();
param.put("userId",userId);
List<String> listJobIds = sysUserJobdel.stream().map(SysUserJob::getJobId).distinct().collect(Collectors.toList());
param.put("jobIds",listJobIds);
for (int i = 0; i < 10000; i++) {
    SysUserJob userJob =new SysUserJob();
    userJob.setJobId(String.valueOf(SystemUtils.nextId()));
    userJob.setUserId(userId);
    sysUserJobdel.add(userJob);
    listJobIds.add(String.valueOf(SystemUtils.nextId()));
}
param.put("jobIds",listJobIds);
long begintime1 = System.currentTimeMillis();
sysUserMapper.deleteUserJobs(param);
long endtime1 = System.currentTimeMillis();
long costTime1 = ( endtime1 - begintime1 );
System.err.println( "costTime1===="+ costTime1);

long begintime2 = System.currentTimeMillis();
sysUserMapper.deleteUserJob(sysUserJobdel);
long endtime2 = System.currentTimeMillis();
long costTime2 = ( endtime2 - begintime2 );
System.err.println( "costTime2===="+ costTime2);

long begintime3 = System.currentTimeMillis();
sysUserMapper.deletesUsersJobs(sysUserJobdel);
long endtime3 = System.currentTimeMillis();
long costTime3 = ( endtime3 - begintime3 );
System.err.println( "costTime3===="+ costTime3);

 

 

<delete id="deleteUserJobs" parameterType="java.util.Map">
    delete from sys_user_job where user_id = #{userId} and
    job_id in
    <foreach collection="jobIds" index="index" item="item" open="(" separator="," close=")">#{item}</foreach>
</delete>
<delete id="deleteUserJob" parameterType="java.util.List">
    delete from sys_user_job where
    <foreach collection="list" item="item" separator=" or " index="index">
        (user_id = #{item.userId} and job_id= #{item.jobId})
    </foreach>
</delete>
<delete id="deletesUsersJobs" parameterType="java.util.List">
    delete from sys_user_job where (user_id,job_id) in
    <foreach collection="list" item="item" index="index"  separator="," open="(" close=")">
        (#{item.userId},#{item.jobId})
    </foreach>
</delete>

 

三次结果输出:

 
costTime1====173
costTime2====1673
costTime3====414


costTime1====115
costTime2====1523
costTime3====391


costTime1====105
costTime2====1501
costTime3====417

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!