问题如何而来:

对于刚参加工作的我  批量删除数据通常采用的是前端传递到后台一个对象的id字符串  通过逗号分隔的多个id  或者收的直接是一个id数组 两个原理一样第一个后台要在次使用split(",")做分隔成数组 ,然后通过遍历数组  采用 delete(id) 逐条的执行删除操作。

以前  这样写大家应该明白什么意思  循环里 通过每条的id 执行一次删除

for(){

delete  from tb_name where id = ?

}

这样是我一直采用的方式。

首先从功能实现的角度 上面的解决方案并没有任何问题。

那么为什么我会记录自己对for 与in  的效率问题   是另外一个朋友说他在实现批量处理删除操作的时候 他们的技术总监说这样的效率比较慢  让采用in

实现方式很简单  就是将以前的单个逐条删除  转为 将id数组转为一个id集合  sql 实现如下 方式

delete from tb_name where  id  in (  传入id的集合)    我们通常实现删除一条数据的操作都是采用主键id来操作的。

那么为什么说采用in的方式效率更高那?

我自己的理解 for循环的方式  每执行一次删除操作就要在数据库连接池中建立一次链接 执行一次sql的解析等一系列过程  同时增加了数据库的IO操作

而in 只需要一次的连接  采用or 的形式  对sql的解析也只需要一次  所以从这些方面就说明了 采用in的方式效率更高一些。

其实两种方式都是来解决实际的问题,如果在后台系统比如OA 等办公系统上  这些内部系统在两者的效率上我们并不会能感受到所以都可以,应用要用在适合的位置,首先要解决问题。

实际应用:

//删除选中的消息
function delMessage(){
var arr = new Array();
$("input[name='items']:checked").each(function (i,e) {
var id = $(this).val();
arr.push(id);
});
if(arr.length>0){
var index =layer.confirm("确定删除这"+arr.length+"条数据吗?",
{icon:3,title:'提示',
scrollbar:false,
shadeClose: false ,
resize:false,
shade: [0.3, '#000'],
},
function(){
$.ajax({
type:'post',
url:'${base}/message/deleteMainMultipleMessages',
data:{"ids":arr},
success:function (data) {
location.reload();
},
error:function (data) {
layer.msg("删除失败!请稍后重试!")
}
})
layer.close(index);
}
)
}else if(arr.length==0){
layer.msg("请选择数据!",{time:1000});
}
}

controller中接收:

 /**
* 首页处理消息删除
* @param ids
* @return
*/
@RequestMapping("/deleteMainMultipleMessages")
public void deleteMainMultipleMessages(@RequestParam(value = "ids[]")String ids[]){
service.deleteBatch(ids);
}

service 处理:

/**
* 批量删除消息操作
* @param ids
*/
public void deleteBatch(String[] ids) {
mapper.deleteBatch(ids);
}

mapper 处理:

void deleteBatch(String[] ids);

mapper.xml处理:

    <delete id="deleteBatch">
delete from sys_message where id in
<foreach collection="array" item="id" index="index" open="(" separator="," close=")">
#{id}
</foreach>
</delete>

常用操作提高效率 之 for 与in的更多相关文章

  1. 快速上手Mac效率神器Alfred以及Alfred常用操作

    前言 Alfred,想必大家就算没用过也耳闻过.Alfred是一个让你可以丢掉鼠标的神器.很多读者可能之前认为Alfred的学习成本高,或者感觉它太复杂,而望之却步.其实Alfred并非高不可攀,本文 ...

  2. [编辑器]vim常用操作

    我是ide的用户,对于vim一只停留在:打开.看.写.关闭基本操作,因为现在更多的接触linux服务器,所以为了提高 效率,用好vim是必备技能!下面罗列一些vim的常用操作,用做备忘(不断更新): ...

  3. 利用mock提高效率

    利用mock提高效率 谈到mock,就不得不讲前后端分离.理想情况下前后端不分离,由全栈的人以product和infrastructure的维度进行开发,效率是最高的.近些年来业务的复杂度越来越高,真 ...

  4. 【转】.NET程序员提高效率的70多个开发工具

    原文:.NET程序员提高效率的70多个开发工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件 ...

  5. sql server建库建表(数据库和数据表的常用操作)

    数据库和数据表 (开发常用 操作) 一,数据库的创建 一个SQLServer 是由两个文件组成的:数据文件(mdf) 和日志文件(ldf),所以我们创建数据库就是要为其指定数据库名.数据文件和日志文件 ...

  6. 《.NETer提高效率——环境部署》

    初衷 兵马未动,粮草先行. 电脑坏了or换工作等需要重装系统. 开发运维一把梭. 与时俱进. 记忆力差,需要文字记录. 因为懒... 目的 通过学习 Linux+docker+kubernetes+C ...

  7. .NET中DataTable的常用操作

    一.目的 在各种.NET开发中,DataTable都是一个非常常见且重要的类型,在与数据打交道的过程中可以说是必不可少的对象. 它功能强大,属性与功能也是相当丰富,用好的话,使我们在处理数据时,减少很 ...

  8. 用ArcGIS?37个Arcmap常用操作技巧可能帮到您

    1. 要素的剪切与延伸 实用工具 TASK 任务栏 Extend/Trim feature 剪切所得内容与你画线的方向有关. 2. 自动捕捉跟踪工具 点击Editor工具栏中Snapping来打开Sn ...

  9. 提高效率的Linux命令

    提高效率的Linux命令 一.fc 二.disown 三.Ctrl + x +e 四.!! 两个感叹号 五.一次创建多个目录或文件 六.tee 七.删除从开头到光标处的命令文本 八.删除从光标到结尾处 ...

随机推荐

  1. python26 re正则表达式

    #coding:utf-8 #/usr/bin/python """ 2018-11-25 dinghanhua re """ import ...

  2. Thread control block & thread

    https://en.wikipedia.org/wiki/Thread_control_block Thread Control Block (TCB) is a data structure in ...

  3. BZOJ3680:吊打XXX(模拟退火)

    Description gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将 n个gty吊在n根绳子上,每根绳子穿过天台的一个 ...

  4. IntelliJ IDEA 快速搭建 Spring MVC环境

    IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合.代码审查. 创新的GUI设计等方面的功能可以说是超常的. ...

  5. 学习换脸:Switching Eds: Face swapping with Python, dlib, and OpenCV

    学习GitHub上比较火换脸博客,原英文版:https://matthewearl.github.io/2015/07/28/switching-eds-with-python/ 系统win10,x6 ...

  6. 【题解】UVA756 Biorhythms (中国剩余定理)

    UVA756:https://www.luogu.org/problemnew/show/UVA756 思路 几乎是裸的中国剩余定理模板题 但是需要注意的是此题并不是求最小正整数解 而是求大于d的解 ...

  7. Oracle数据库大量library cache: mutex X及latch: shared pool问题排查一例

    业务系统数据库夯住,数据库内大量的library cache: mutex X及latch: shared pool等待,alert日志信息如下 Tue Sep :: WARNING: inbound ...

  8. c# 常用数据库封装

    我不为大家贴代码了,没有意思,有点多,我主要给大家介绍一下,源码会上传CSDN和GIT:我定义了一个ADO.NET操作接口,所有按照接口封装 1.sqlite数据库(需要SQLite.Interop. ...

  9. django-orm简记

    首先orm是什么? orm-------->对象关系映射 专业性解释网上一大推,随便搜搜就能了解大概.在我理解(通俗):一个类 ----- 数据库中一张表 类属性 ----- 数据表中的字段名 ...

  10. LeetCode 简单 - 最大子序和(53)

    采用动态规划方法O(n) 设sum[i]为以第i个元素结尾且和最大的连续子数组.假设对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且和最大的连续子数组实际上,要么是以 ...