【版本一】

做.net项目时候我的批量删除是这样的:

1.Controller层代码:

var tempCityID = Request["CityId"];
//通过切割方式获得id
string[] City = tempCityID.Split(',');  bool result = false;
//循环ID实现对DataGrid中多条数据的操作,优化方案参考下文
for (int i = 0; i < City.Length; i++)
{  CityBasicInfoViewModel cityBasic = new CityBasicInfoViewModel()  {  CityID = new Guid(City[i]),  IsEnable = 0,  Operator = "zzh"  };  //调用service端的Delete方法result = ICityBasic.DeleteCityBasicInfo(cityBasic);
}

思路先从前台获取索要删除记录的id集合,存放到名为“CityId”的字符串当中(上个例子的代码),在controller层中将其通过split函数存放到名为City的数组City[i]当中,调用Service端方法DeleteCityBasicInfo()通过执行多次Service端调用以及多次I/O操作从而实现批量删除。

2.BLL层代码:

        /// <summary>/// 删除市直单位的基本信息 - 张振华 - 2016年3月14日16:55:42/// </summary>/// <param name="UnitBasicInfoVM">市直单位ViewModel</param>/// <returns>bool值</returns>public bool DeleteUnitBasicInfo(UnitBasicInfoViewModel enUnitBasicInfo){try{//创建映射规则Mapper.CreateMap<UnitBasicInfoViewModel, T_UnitBasicInfo>();//进行转换T_UnitBasicInfo UnitBasicInfoEntity = Mapper.Map<T_UnitBasicInfo>(enUnitBasicInfo);string[] proName = { "IsEnable", "Operator" };this.CurrentDal.Update(UnitBasicInfoEntity, a => a.UnitID == enUnitBasicInfo.UnitID, proName);this.DbSession.SaveChanges();return true;}catch (Exception){return false;}}

如上所述,普通不过的删除单条记录的代码写法。

总结:这种做法1.执行多次Client端对Service端的调用,2.Service端多次执行I/O操作,性能需要优化。

【版本二】

1.Controller当中的代码:

//Controller中通过split函数截取
var tempCityID = Request["CityId"];
//通过切割方式获得id
string[] City = tempCityID.Split(',');
//调用service端的Delete方法,传递数组参数
result = ICityBasic.DeleteCityBasicInfo(City);
} 

相比版本一,在Controller当中调用Service的Delete方法时,传递的参数换成一个数组City[i],而且仅仅调用了一次Service。

2.Service端的代码:

//删除方法
public bool DeleteCityBasicInfoBasicInfo(String[] City){try{for(i=1,i<City.Length,i++){//创建映射规则Mapper.CreateMap<CityBasicInfoViewModel, T_CityBasicInfo>();//进行转换T_CityBasicInfo CityBasicInfoEntity = Mapper.Map<T_CityBasicInfo>(City[i]);//软删除,将IsDelete字段更新为0this.CurrentDal.Update(CityBasicInfoEntity, a => a.CityID == City[i].CityID, a.IsDelete == 0);this.DbSession.SaveChanges();}return true;}catch (Exception){return false;}}

Service端的方法仍然会执行多次I/O操作。

总结:相比版本一,优化了Client端对Service端的多次调用。

【版本三】

1.Controller端的代码不变

2.BLL层的代码:

//删除方法
public bool DeleteCityBasicInfoBasicInfo(String[] City){try{StringBuilder sbStr = new StringBuilder();for (int i=0;i<City.length;i++){sbStr.append("'").append(City[i]).append("'").append(",");}String sql = "delete * from T_CityBasicInfo where CityID in (" + sbStr.substring(0,sbStr.length()-1) + ")";//创建映射规则Mapper.CreateMap<CityBasicInfoViewModel, T_CityBasicInfo>();//进行转换T_CityBasicInfo CityBasicInfoEntity = Mapper.Map<T_CityBasicInfo>(City[i]);//删除操作this.CurrentDal.ExecuteSqlCommand(sql);this.DbSession.SaveChanges();return true;}catch (Exception){return false;}}

至此,批量删除操作实现了仅仅一次Service调用,一次I/O操作。

在这里,将数组传入该方法中,通过SQL拼接字符串,"delete * from TABLE where T_字段 in (集合)“ 实现了一次I/O操作。

【版本四】

这一版本是在java中的应用,通过使用preparedStatement占位符的拼接来实现。

//使用占位符形式完成批量删除 - 张振华 - 2016年6月17日
public void delUser(String[] userIds) {StringBuilder sbStr = new StringBuilder();for (int i=0; i<userIds.length; i++){sbStr.append("?")//除substring之外,另一种截取掉最后一位的方法if (i<(userIds.length - 1)){sbStr.append(",")}}String sql = "delete from t_user where user_id in (" + sbStr.toString() + ")";Connection conn = null;PreparedStatement pstmt = null;try {conn = DbUtil.getConnection();pstmt = comm.prepareStatement(sql);//为PreparedStatement动态赋值,这段代码可以封装起来。for (int i=0; i<userIds.length; i++) {//数组下标从0开始,但是PreparedStatement下标从1开始pstmt.setString(i + 1, userIds[i]);}pstmt.executeUpdate();}Catch(SQLException e) {e.printStackTrace();}finally {DbUtil.close(pstmt);DbUtil.close(conn);}}

使用占位符的拼接来实现批量删除,这个方法相比(版本三)来说,对于防止SQL注入更加优化了,而且实现了动态加载所要删除的列(具体看代码注释),如果将表名再作为参数使用时,该段代码就可以打包作为删除的公共方法了,对那张表都灵活了。

【颗粒归仓】(五)批量删除方法进阶相关推荐

  1. 批量删除html网页,ie浏览器收藏夹网页批量删除方法

    ie浏览器收藏夹网页批量删除方法 ie浏览器收藏夹网页怎么批量删除?有时候我们重装系统不经意选择了ghost版本安装,安装好以后发现里面的IE浏览器居然也是显示收藏夹栏的,而且收藏夹上面收藏了各种购物 ...

  2. win11内存完整性不兼容驱动程序的五种删除方法

    win11内存完整性不兼容的驱动程序怎么删除?win11的驱动不兼容的话,可能会导致软件或者游戏无法正常运行,也会导致Windows安全中心中的内核隔离--内核完整性功能无法开启.那么win11内存完 ...

  3. SAP中如何实现<生产订单>的批量删除方法!

    一.计划订单部份: 1.SAP 生产模块的计划订单批量删除的功能代码 MD16. 二.生产订单部份: 2.生产订单批量做删除标记.程序名:PPARCHP1 ,运行SE38,做pro.ORD 的批量删除 ...

  4. docker 删除_docker 批量删除镜像

    这两天做了些实验,生成了这么多镜像.本文研究删除方法和批量删除方法. 准备工作:查看运行中的容器 sudo docker container ls -a sudo docker container l ...

  5. sqlserver中自定义函数+存储过程实现批量删除

    由于项目的需要,很多模块都要实现批量删除的功能.为了方便模块的调用,把批量删除方法写成自定义函数.直接上代码. 自定义函数: ALTER FUNCTION [dbo].[func_SplitById] ...

  6. Mysql批量删除大量数据

    一.Mysql批量删除大量数据 方案1 假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE ...

  7. Redis Cluster(集群)模式下批量删除key

    1 背景 SpringSecurity版本升级后,发现会有反序列化失败问题. 所以需要将Redis中存储token相关key批量删除掉: access:* auth_to_access:* auth: ...

  8. Mybatis进行批量删除

    mybatis进行批量删除有很多方式,下面是一种很简单的方法: 使用in函数 接口定义批量删除方法: /*** 批量删除 * @param ids * @return * */ int deleteM ...

  9. Element ui 前端自定义分页/批量选中/批量删除/单个删除/element-ui(复选框)type=“selection“置灰

    直接看代码 <template><div class="page-content"><div class="page-header" ...

最新文章

  1. Python七大原则,24种设计模式
  2. 工程架构师对3月14号的白×××人节有什么看法??
  3. 1.2 Java类的定义
  4. mac下安装配置mongodb
  5. Apache Dubbo 被曝出“高危”远程代码执行漏洞
  6. 1536299 2013 - PPR item change - Genil mode
  7. 单片机小白学步系列(十) 单片机程序下载相关知识
  8. pom.xml详细说明
  9. 浅析“高斯白噪声”,“泊松噪声”,“椒盐噪声”的区别
  10. linux spi不使用框架,Linux spi驱动框架之执行流程
  11. 基于FPGA实现压缩算法
  12. 迪斯尼首次取代苹果公司 成“美国人最亲密品牌”
  13. 20175320 2018-2019-2 《Java程序设计》第8周学习总结
  14. linux中定义用户账户的文件为,Linux中用户和组中认证库和解析库的文件格式以及默认参数定义文件...
  15. java中ejb项目_创建EJB项目
  16. 如何完成一款游戏? | 独立游戏制作
  17. thoughtworks作业trains
  18. 在Java中实现有账号密码的Http代理访问
  19. C语言解决三色旗问题
  20. Win10完全卸载MySQL

热门文章

  1. 【Tomcat】 报错以及解决方法
  2. Ubuntu-21.10 安装Nginx1.18
  3. Excel数据分析从入门到精通(十三)28个图表之趋势分析+转化分析
  4. jupyter notebook基本知识——jupyter notebook常用的快捷键
  5. python中延时函数_python延时绑定
  6. 大专的计算机专业要学高数吗,普通本、专科“数学”不好,3个专业不建议报,“没出路”!...
  7. vue input自动获取焦点的方法
  8. 一文带你了解微软推出的Microsoft Designer AI设计工具
  9. C语言实现的滑动平均滤波算法
  10. 28.EXTI外部中断原理与配置