求经验!Mybatis 针对Oracle数据库如何写“多条件”批量删除语句?

我的写法:

  <delete id="delMultiByIds2" parameterType="java.util.List">  
  delete from tb_duty where
    <foreach collection="list" item="item" index="index" separator="or">  
       ( dscd=#{item.dscd}, 
       and unit_id=#{item.unitId},
       and year=#{item.year},
       and month=#{item.month},
       and flag=#{item.flag} )
    </foreach> 
</delete>

语句的语法没错,只是无法删除数据库中的记录,肯定是语句的写法有问题。
图片说明
希望有经验的高手指教一把!

0

8个回答

问题解决后兴奋地写下:
程序批量删除无法删除的主要问题最终还是在sql语句上,虽然debug日志上能看到sql语句和参数都没有问题,但是!sql语句执行的时候并没有拿到这些个参数。经调试,将foreach中参数赋值的写法由原先的

 <foreach collection="list" item="item" index="index" separator="union all">  
     。。。B.dscd=#{item.dscd} and B.unit_id=#{item.unitId} 。。。
    </foreach>

修改为:

 <foreach collection="list" item="item" index="index" separator="union all">  
     。。。B.dscd=${item.dscd} and B.unit_id=${item.unitId} 。。。
    </foreach>

至此,困扰我许久的问题得以解决!
附:Mybatis针对Oracle数据库“多条件”批量删除的mapper.xml

 <!-- 批量删除值班表 -->
 <delete id="delMultiByIds2" parameterType="java.util.List"> 
  delete from tb_duty A
  where exists 
  ( 
   select 1 from(
    <foreach collection="list" item="item" index="index" separator="union all">  
     select  B.* from tb_duty B where 1=1 and  B.dscd=${item.dscd} and B.unit_id=${item.unitId} and 
      B.year=${item.year} and B.month=${item.month} and B.flag=${item.flag} 
    </foreach>
    )S where  A.duty_id=S.duty_id
  )
</delete>


0

传递的参数后台是否能够获取的到?

0

这个当然能获取到,都在list里的对象里面。

0

后台没有输出错误原因么 日志里

0
big1989wmf
Franciswmf 无,无的意思应该就是sql语句语法没有问题。
接近 4 年之前 回复
   <!-- 批量删除值班表 -->
 <delete id="delMultiByIds2" parameterType="java.util.List" > 
  delete from tb_duty
  where exists
  ( 
    <foreach collection="list" item="item" index="index" separator="union all">  
     SELECT  <include refid="Base_Column_List" /> from tb_duty where 1=1 and  dscd=#{item.dscd} and unit_id=#{item.unitId} and 
      year=#{item.year} and month=#{item.month} and flag=#{item.flag}
    </foreach>
  )
</delete>

最新的sql在plsql里面执行没有问题,但是通过mabatis执行还是无法实现删除效果!继续等待。。。一但解决,我会里面贴上解决方案。

0

最新的sql:

   <!-- 批量删除值班表 -->
 <delete id="delMultiByIds2" parameterType="java.util.List" > 
  delete from tb_duty A
  where exists 
  ( 
    <foreach collection="list" item="item" index="index" separator="union all">  
     select  B.* from tb_duty B where 1=1 and  B.dscd=#{item.dscd} and B.unit_id=#{item.unitId} and 
      B.year=#{item.year} and B.month=#{item.month} and B.flag=#{item.flag} 
      and  A.duty_id=B.duty_id
    </foreach>
  ) 
</delete>

直接拿打印的sql语句(语句和参数都有)在plsql里面执行可以,但是程序上走一遍还是不行。无法删除!
语句:

 delete from tb_duty A where exists ( select B.* from tb_duty B where 1=1 and B.dscd=? and B.unit_id=? and B.year=? and B.month=? and B.flag=? and A.duty_id=B.duty_id union all select B.* from tb_duty B where 1=1 and B.dscd=? and B.unit_id=? and B.year=? and B.month=? and B.flag=? and A.duty_id=B.duty_id union all select B.* from tb_duty B where 1=1 and B.dscd=? and B.unit_id=? and B.year=? and B.month=? and B.flag=? and A.duty_id=B.duty_id ) 

参数:

 Parameters: 340100(String), 4(Integer), 2015(String), 7(String), 1(Integer), 340100(String), 4(Integer), 2015(String), 6(String), 1(Integer), 340100(String), 4(Integer), 2015(String), 5(String), 1(Integer)

继续等待。。。。。。

0

问题很可能出在Spring和Mybatis整合事务起没起作用上!
控制台有2句可疑的话(已标记):

 2015-08-22 09:16:21,877 DEBUG [org.mybatis.spring.SqlSessionUtils] - Creating a new SqlSession
2015-08-22 09:16:21,877 DEBUG [org.mybatis.spring.SqlSessionUtils] - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f703110] was not registered for synchronization because synchronization is not active
2015-08-22 09:16:21,877 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Fetching JDBC Connection from DataSource
2015-08-22 09:16:21,877 DEBUG [org.springframework.jdbc.datasource.DriverManagerDataSource] - Creating new JDBC DriverManager Connection to [jdbc:oracle:thin:@10.34.0.84:1521:orcl]
# 2015-08-22 09:16:21,924 DEBUG [org.mybatis.spring.transaction.SpringManagedTransaction] - JDBC Connection [oracle.jdbc.driver.T4CConnection@616b6449] will not be managed by Spring
2015-08-22 09:16:21,924 DEBUG [com.sunny.dao.duty.DutyMapper.delMultiByIds2] - ==>  Preparing: delete from tb_duty A where exists ( select S.* from( select T.* from tb_duty T right join ( select B.* from tb_duty B where 1=1 and B.dscd=? and B.unit_id=? and B.year=? and B.month=? and B.flag=? union all select B.* from tb_duty B where 1=1 and B.dscd=? and B.unit_id=? and B.year=? and B.month=? and B.flag=? ) B on T.duty_id=B.duty_id ) S where A.duty_id=S.duty_id ) 
2015-08-22 09:16:21,924 DEBUG [com.sunny.dao.duty.DutyMapper.delMultiByIds2] - ==> Parameters: 340100(String), 4(Integer), 2015(String), 9(String), 1(Integer), 340100(String), 4(Integer), 2015(String), 5(String), 1(Integer)
2015-08-22 09:16:21,924 DEBUG [com.sunny.dao.duty.DutyMapper.delMultiByIds2] - <==    Updates: 0
# 2015-08-22 09:16:21,924 DEBUG [org.mybatis.spring.SqlSessionUtils] - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f703110]
2015-08-22 09:16:21,924 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Returning JDBC Connection to DataSource
2015-08-22 09:16:21,924 DEBUG [org.springframework.web.method.HandlerMethod] - Method [delMultiByIds] returned [{"success":false}]
0

上面的标记没反应,是下面这2句:
第一句:
JDBC Connection [oracle.jdbc.driver.T4CConnection@616b6449] will not be managed by Spring
第二句:
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f703110]

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
mybatis针对Oracle数据库进行(单个或多个条件)批量操作(新增、修改、删除)的sql写法--mysql...
[b]1、批量新增:[/b] [code=&quot;java&quot;] insert into TB_DUTY select SEQ_TB_DUTY.nextval,A.* from( SELECT #{item.dscd}, #{item.unitId},#{item.year},#{item.month},#{item.day},#{item.weekDay...
mybatis针对Oracle数据库进行(单个或多个条件)批量操作(新增、修改、删除)的sql写法--mysql
1、批量新增:   insert into TB_DUTY select SEQ_TB_DUTY.nextval,A.* from( SELECT #{item.dscd}, #{item.unitId},#{item.year},#{item.month},#{item.day},#{item.weekDay}, #{item.mor
Mybatis动态SQL 条件查询,批量删除
比如说某宝的搜索。可以添加选择的嘛。也就是where 后面的条件。如果有12种条件。要是全一个一个写那是要写很多哦。mybatis就有动态sql。根据条件组合sql语句。 首先创建个前端页面<!DOCTYPE html> <html> <head> <title>hight_search.html</title> <meta http-equiv="keywords" conte
mybatis多条件批量删除
delete from md_prsnl_ent     where (PRSNLID,ENTID) in      (#{item.prsnlid},#{item.entid})
MyBatis中的批量删除操作(转)
MyBatis中的批量删除操作 博客分类:   ORM java mybatis 批量 删除 批量删除  MyBatis的作用我想不用多说,今天说说MyBatis中的批量删除操作。  MyBatis中的删除使用delete节点完成,如:       Java代码   &amp;lt;delete id = &quot;delete&quot; parameterType = ...
MyBatis 多个条件使用Map传递参数进行批量删除
目录 1、使用场景 2、代码实现 3、实现结果展现 4、参考文章: 1、使用场景 因为项目需要针对资源文件(视频、音频、文档),编辑时候可能出现以下3种情况: 实现的项目效果图: 1.1、删除多个已经选择的标签(与本次文章相关内容) 1.2、新增标签(选择已有标签作为新增,输入新的标签作为新增的) 因为本业务场景之中与此文章相关的内容...
Mybatis 使用动态语句实现批量删除(delete结合foreach)
Mybatis 使用动态语句实现批量删除(delete结合foreach)
mybatis批量删除的sql语句拼接
1。问题描述在删除一条语句时,有时候会关联外键,这时候批量删除会大大的提高效率。
mybatis动态Sql实现批量添加和批量删除
mybatis动态Sql实现批量添加和批量删除: 新建一个domainMapper接口: 接下来写:domainMapper.xml配置,在本利中即:UserMapper.xml &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&amp;gt; &amp;lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; ...
MyBatis批量删除,多参数
Mapper:public int recommendSolution(@Param(value ="id")int[] id,@Param(value ="name")String name);xml: update t_solution s set s.isRecommend = 1 ,s.expert_id = (select e.expert_id from t
mybatis 批量删除问题
  问题描述:这是在做一个客户管理的功能,对客户卡片进行批量分配和批量取消分配,然后该删除条件是要通过前端传过来的用户主键和客户主键进行查询得出的,产生该问题的主要原因是因为在foreach中使用了多个select语句,SQL语句in里面不支持多个select语句(仅支持一个),报语法错误 报错截图: 问题解决过程:在网上百度了很多,不知道是不是自己关键词搜错了,搜了好久都没有相关的...
MyBatis批量删除写法
1、DAO层接口void deleteAll(@Param(&quot;ids&quot;)List&amp;lt;Integer&amp;gt; ids); 2、Mapper文件&amp;lt;update id=&quot;deleteAll&quot;&amp;gt; update ems_emp set status=0 where id in &amp;lt;foreach collection=&quot;ids&quot; open=&quot;(&quot; item=&quot;i
myBatis中删除条件的拼接问题
今天刚刚学习了mybatis,做了简单的对数据库的增删改查。在进行删除操作时,单条删除时很简单,但是批量删除的时候拼接删除条件却有些麻烦,现记录一下做法。 Sql语句中,当删除条件并不唯一的时候,我们有两种删除的sql语句,一种使用and拼接where中的条件,例如delete from 表名where 条件1 and 条件2,另一种是使用in 例如delete from 表名where 元素i
MyBatis中的批量删除操作
MyBatis的作用我想不用多说,今天说说MyBatis中的批量删除操作。  MyBatis中的删除使用delete节点完成,如:        Java代码   "delete" parameterType = "test">               delete from tests where id = #{id}       ]]>     
Mybatis实现批量删除操作
这里主要考虑两种参数类型:数组或者集合.而这点区别主要体现在EmpMapper.xml文件中标签的collection属性: 当collection=”array“时,表名参数为数组; 当collection=”list“时,表名参数为集合. 具体示例如下:EmpMapper.xml: <!-- 批量删除员工信息 --> <delete id="batchDeleteEmps" par
mybatis3 多条件查询的xml写法
多条件查询时,用 select from sys_user and id = #{id,jdbcType=BIGINT} and username = #{username,jdbcType=VARCHAR} ...
mybatis plus的删除的条件构造器
/** 根据 entity 条件,删除记录 @param queryWrapper 实体对象封装操作类(可以为 null) @return 删除成功记录数 */ int delete(@Param(Constants.WRAPPER) Wrapper queryWrapper); UpdateWrapper updateWrapper = new UpdateWrapper()....
MyBatis中动态SQL语句完成多条件查询
一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作;还通过一些条件选择语句让我们SQL的多条件、动态查询更加容易、简洁、直观。 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件。 choose(when otherwise)相当于Java中的switch语句,通常w
mybatis批量增删改操作(单条件与多条件下的最优操作)
前言 由于比较懒,每次处理批量操作的情景都喜欢直接copy一个模板进行修改,然后就有了下面的总结。 批量操作数据库的情景很多,关系型数据库的操作差不多,由于本人比较喜欢mybatis,简单的写下关于mybatis对于关系型数据库的单条件与多条件的情景下的批量操作,如果使用其他dao层框架,可以提取sql语句稍作修改即可哦。 模板都是用来提高效率的,欢迎copy哦 1、批量新...
MyBatis动态SQL语句实现多条件查询
MyBatis中动态SQL语句完成多条件查询,条件可以为字符串,数值,时间,以及自定义的类. 写的不好之处请指教~ MyBatis的XML: &amp;lt;mapper namespace=&quot;com.dao.NotifyManagementInfoDao&quot;&amp;gt; &amp;lt;resultMap type=&quot;com.model.NotifyManagementInfo&quot; id=&quot;notifyManag...
mybatis 多条件批量更新
最近做到一个多条件修改功能,发现在mysql运行成功的语句,在mybatis里面却不行,所以在这里总结一下。 最后还是用case when then 完成的。 &amp;lt;update id=&quot;updateByPrimaryKeySelective&quot; parameterType=&quot;java.util.List&quot;&amp;gt; update table &amp;lt;trim...
Mybatis按条件进行批量更新update
where条件中id值不同,更新的good_shelves_name 字段值也不同 一、Mapper.xml &amp;lt;update id=&quot;updateByGoodId&quot; parameterType=&quot;com.baiducar.entity.goodsshelves.StorageGoodListDto&quot;&amp;gt; update base_goods_shelves &amp;lt;...
mybatis OR语句的写法
/** * 根据关键字获取[相关资讯]列表 * WHERE * DELETED = ? * AND STATE = ? * AND ( KEYWORDS LIKE '%aaa%' or TITLE '%aaa%' ) OR ( KEYWORDS LIKE '%bbb%' or TITLE '%bbb%' ); * * @pa
mybatis批量添加、删除、修改sql(Oracle)语句
批量添加:  &amp;lt;insert  id=&quot;名称&quot; parameterType=&quot;java.util.List&quot;&amp;gt;       insert into 表名 (字段,字段, 字段)  values          &amp;lt;foreach collection=&quot;list&quot; item=&quot;item&quot; index=&quot;index&quot; separator=&quot;,&quot;&a
mybatis 脚本处理语句(条件查询,批量增删改查)
常用的mybatis sql操作
批量 删除 oracle sql传入list
列表的批量删除,案例使用前端ext框架,其他都可,具体代码如下: ----xml--------sql-------     delete from commonResourceConfig  #ids[]#     ---------------dao--------- public void  commonResourceConfigDe
mybatis框架批量查询/批量删除
第一种 :以数组形式传入参数&amp;lt;!-- 批量删除 --&amp;gt; &amp;lt;delete id=&quot;deleteAll&quot; parameterType=&quot;String&quot;&amp;gt; delete from &amp;lt;include refid=&quot;tableName&quot;&amp;gt;&amp;lt;/include&amp;gt; where  条件字段 in &amp;lt;foreach item=&qu
mybatis动态sql删除语法
1.StudenDao package cn.itcast.app06; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; import cn
Mybatis多表批量删除
一. 这里主要考虑两种参数类型:数组或者集合. 而这点区别主要体现在EmpMapper.xml文件中标签的collection属性: 当collection=”array“时,表名参数为数组;当collection=”list“时,表名参数为集合. 二. 注意: 无论Mybatis是与mysql数据库结合,还是与Oracle数据库,都同样适合如下设置与操作. 三. 具
ibatis批量插入 批量删除 -iterate标签应用
项目开发中在很多地方可能会遇到同时插入多条记录到数据库的业务场景,如果业务级别循环单条插入数据会不断建立连接且有多个事务,这个时候如果业务的事务执行频率相当较高的话(高并发),对数据库的性能影响是比较大的;为了提高效率,批量操作会是不错的选择,一次批量操作只需要建立一次连接且一个事务,能很大程度上提高数据库的效率。       批量插入操作的sql语句原型如下: insert  i
mybatis中xml怎么在where中写两个条件,而且这两个条件是或者的关系?
select from vip_member_msg where member_id = #{memberId,jdbcType=VARCHAR} and has_draw =0 and now() &amp;lt;= end_time and now() &amp;gt;= begin_time and (level_key &amp;lt;= #{levelKey,jdbcT...
MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增
续上篇:MyBatis学习笔记-07.MyBatis动态Sql语句if、where、trim、set本次将继续记MyBatis动态Sql语句的choose和foreach:一、choose(较少应用):有时我们不想应用到所有的条件语句,而只想从中择其一项。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。这里我们以mybatis官方文档中给出的...
【Maven+SSM】Mybatis动态SQL拼接根据对象删除单条或者多条数据
前言: 上一篇文章写了对于多个属性的查询的Mybatis写法。实际是对一个对象的操作方式。 正文: 本文就补充写对一个list的操作吧。 先看如何删除一行数据。然后在看如何删除多行数据。
mybatis多条件语句查询
mybatis多条件语句查询     注意:使用mapper代理开发时,namespace有特殊作用,namespace等于mapper接口地址  -->   select * from Spider_Top_Keyword  select * from Spider_Top_Keyword      status=#{status}  
mybatis 根据id批量删除的两种方法
第一种,直接传递给mapper.xml  集合/数组形式 &amp;lt;delete id=&quot;deleteByLogic&quot; parameterType = &quot;java.util.List&quot;&amp;gt; delete from user where 1&amp;gt;2     or id in &amp;lt;foreach collection=&quot;list&quot; item=&quot;item&quot;
mybatis 多条件多值批量更新
转载自:https://blog.csdn.net/aklin47/article/details/81026930 &amp;lt;update id=&quot;batchUpdate&quot; parameterType=&quot;java.util.List&quot;&amp;gt; update demo_table set field1 = &amp;lt;foreach collection=&quot;list&quot; ite...
用mybatis进行批量删除
利用mybatis的框架中的foreach标签进行批量删除 1 在DAO的接口层批量删除方法的参数是一个Integer类型的数组 并取别名  Public void delete(param(“别名”)Integer[] ids)   2在mapper文件中的delete标签 Delete sql语句最后的where 条件 in #{id}
几种mybatis 模糊查询条件写法
写法一 通过CONCAT()将两个字符串连接起来 @Ognl@isNotEmpty()函数是用来判断你传入的值是否不为空,不为空才在sql里添加这个查询条件,这是动态mybatis sql语句的写法,idcard就是你传入的值 "getAllWhere"> if test="@Ognl@isNotEmpty(idcard)">AND idcard LIKE CON
mybatis实现数据的批量删除
mybatis中的删除语句配置         delete from product where id in                #{idItem}           product  表名 guid  字段名 collection里表示类型,这里是array,还可以是list idItem不用管,相当于一个变量
SpringMVC + Mybatis 增删改查(批量删除)
SpringMVC + Mybatis框架简单增删改查功能实现
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 针对产品经理的课程 学习java源码的经验