常用操作提高效率 之 for 与in
问题如何而来:
对于刚参加工作的我 批量删除数据通常采用的是前端传递到后台一个对象的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的更多相关文章
- 快速上手Mac效率神器Alfred以及Alfred常用操作
前言 Alfred,想必大家就算没用过也耳闻过.Alfred是一个让你可以丢掉鼠标的神器.很多读者可能之前认为Alfred的学习成本高,或者感觉它太复杂,而望之却步.其实Alfred并非高不可攀,本文 ...
- [编辑器]vim常用操作
我是ide的用户,对于vim一只停留在:打开.看.写.关闭基本操作,因为现在更多的接触linux服务器,所以为了提高 效率,用好vim是必备技能!下面罗列一些vim的常用操作,用做备忘(不断更新): ...
- 利用mock提高效率
利用mock提高效率 谈到mock,就不得不讲前后端分离.理想情况下前后端不分离,由全栈的人以product和infrastructure的维度进行开发,效率是最高的.近些年来业务的复杂度越来越高,真 ...
- 【转】.NET程序员提高效率的70多个开发工具
原文:.NET程序员提高效率的70多个开发工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件 ...
- sql server建库建表(数据库和数据表的常用操作)
数据库和数据表 (开发常用 操作) 一,数据库的创建 一个SQLServer 是由两个文件组成的:数据文件(mdf) 和日志文件(ldf),所以我们创建数据库就是要为其指定数据库名.数据文件和日志文件 ...
- 《.NETer提高效率——环境部署》
初衷 兵马未动,粮草先行. 电脑坏了or换工作等需要重装系统. 开发运维一把梭. 与时俱进. 记忆力差,需要文字记录. 因为懒... 目的 通过学习 Linux+docker+kubernetes+C ...
- .NET中DataTable的常用操作
一.目的 在各种.NET开发中,DataTable都是一个非常常见且重要的类型,在与数据打交道的过程中可以说是必不可少的对象. 它功能强大,属性与功能也是相当丰富,用好的话,使我们在处理数据时,减少很 ...
- 用ArcGIS?37个Arcmap常用操作技巧可能帮到您
1. 要素的剪切与延伸 实用工具 TASK 任务栏 Extend/Trim feature 剪切所得内容与你画线的方向有关. 2. 自动捕捉跟踪工具 点击Editor工具栏中Snapping来打开Sn ...
- 提高效率的Linux命令
提高效率的Linux命令 一.fc 二.disown 三.Ctrl + x +e 四.!! 两个感叹号 五.一次创建多个目录或文件 六.tee 七.删除从开头到光标处的命令文本 八.删除从光标到结尾处 ...
随机推荐
- Codeforces 385C 线性筛素数
题意:给定一个数组,求[l,r] 区间,区间里的素数,数组中,能被这个素数整除的个数,再求和. 分析:区间很大,10^9了,找去区间内的素数是不可能的,但是,数组的数很小,而且要能整除区间内的素数,所 ...
- HDU 1521 指数型母函数
方法一: DFS 方法二:生成函数 每个数可以重复一定次数,求排列组合数,这是裸的指数型生成函数: #include <bits/stdc++.h> using namespace std ...
- 【[HEOI2012]采花】
\(HH\)的项链加强版,数据范围和题意都加强了 题意大概:给出n个数,求区间出现次数>=2的数的个数. 一眼莫队,可是我还不会莫队啊 那就树状数组吧 回忆一下\(HH\)的项链,套路差不多,那 ...
- POJ 3764 The xor-longest Path 【01字典树&&求路径最大异或和&&YY】
题目传送门:http://poj.org/problem?id=3764 The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K ...
- PowerShell实现英汉互译_并保存
代码如下:(介于着色 代码在文末下载) 功能简介: 自动识别英汉输入 返回结果 对于词数小于20的会保存在当前目录下temp_table.txt词文件 大于20的会被识别为句子进行互译 不会存于词文件 ...
- Hibernate注解开发示例
-------------------------------------------------------------------customer------------------------- ...
- java json和对象互转
开发过程中遇到一些对象转string和string转对象的问题,浪费了很久,现在用的熟练些了,总结如下: 1.字符串尽量定义成json可解析的,如{"name":"a&q ...
- 【题解】洛谷P1731 [NOI1999] 生日蛋糕(搜索+剪枝)
洛谷P1731:https://www.luogu.org/problemnew/show/P1731 思路 三重剪枝 当前表面积+下一层表面积如果超过最优值就退出 当前体积+下一层体积如果超过总体积 ...
- ECMAScript6
ECMAScript6介绍 # ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现 # 有利于保证这门语言的开放性和中立性. # 标准在每年的 6 月份正 ...
- 课时91.CSS元素显示模式(掌握)
在HTML中HTML将所有的标签分为两类,分别是容器级和文本级 在CSS中CSS也将所有的标签分为两类,分别是块级元素和行内元素 1.什么是块级元素,什么是行内元素? 块级元素会独占一行 行内元素不会 ...