问题如何而来:

对于刚参加工作的我  批量删除数据通常采用的是前端传递到后台一个对象的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. OC static 和变量

    #include <stdio.h> // 如果在不同源文件出现了同名的内部变量,那么这些变量将互不干扰 static int b; // 用static修饰的全部变量,可以称为内部变量 ...

  2. Codeforces Round #460 (Div. 2)

    A. Supermarket We often go to supermarkets to buy some fruits or vegetables, and on the tag there pr ...

  3. Python-Url编码和解码

    一.为什么要进行Url编码 url带参数的请求格式为(举例): http://www.baidu.com/s?k1=v1&k2=v2 当请求数据为字典data = {k1:v1, k2:v2} ...

  4. 【luogu P1903 [国家集训队]数颜色】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1903 裸的...带修莫队... 比较麻烦吧(对我来说是的) 两个变量分开记录查询和修改操作. #includ ...

  5. ffmpeg视频和声音

    推送视频和声音 ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="内装麦克风 ( ...

  6. js使用hover事件做一个“个人中心”的浮动层

    原材料知识点:hover html: css:

  7. SpringMVC知识点总结

    1. SpringMVC概述        SpringMVC是一个WEB层框架,主要用来负责与页面的交互.        SpringMVC是Spring家族的一大组件.Spring整合Spring ...

  8. 优雅的QSignleton (二) MonoSingleton单例实现

    MonoSingleton.cs namespace QFramework.Example { using System.Collections; using UnityEngine; class C ...

  9. nodejs+express开发blog(2)

    npm install -g nodemon 1,把ejs文件修改为html文件 app.engine('.html', require('ejs').__express);app.set('view ...

  10. 调用微信JS上传照片接口上传图片

    public ActionResult UploadImge(string serverId) { var headPath = "/UploadImage/" + DateTim ...