mybatis多个区间处理方式(双foreach循环)

目录
  • mybatis多个区间处理
    • 思路
  • 多个foreach同时使用问题
    • 应用场景
    • 注意事项
    • 解决方案

mybatis多个区间处理

如图:要实现车辆数不同区间查询条件

思路

a.前端传数组,数组里面放"1-5"String类型值            

b.后端mybatis用双foreach循环解析    

后端代码如下:

<!--图例车辆数区间-->

<if test="countCargoList != null and countCargoList.size>0" >
          and (
          <foreach item="item" index="index" collection="countCargoList">
              (
            <foreach item="item2" index="index2" collection="item.split('-')">
                <if test="index2%2==0">
                    sfi.count_cargo >= #{item2}
                </if>
                <if test="index2%2==1">
                    and sfi.count_cargo <= #{item2}
                </if>
            </foreach>
              )
              <!--最后一次不用加or-->
              <if test="index != countCargoList.size-1" >
                  or
              </if>
          </foreach>
          )
      </if>

多个foreach同时使用问题

应用场景

1、多个表的数据一起删除的时候,有的时候不会建立外键,但主表的关联 表很多的时候,可以直接利用mybatis 进行多表删除。

注意事项

mybatis 中多个foreach 循环,第一次循环的collection  看到的值是一个(数组、list、map、对象,由collection的配置主导)。

第二次foreach 是直接copy第一个foreach的对象值,这个时候会一直累加对象。

解决方案

数组为例

dao层去掉@Param注解

void batchDeleteSysTransferRegist(String rowData[]);

mybatis

<delete id="batchDeleteSysTransferRegist" parameterType="string">
        delete from sys_transfer_regist_item  where transfer_regist_id in
        <foreach item="rowData" collection="array" open="(" separator="," close=")">
            #{rowData}
        </foreach>
        ;delete from sys_transfer_regist_piece  where transfer_regist_id in
        <foreach item="rowData1" collection="array" open="(" separator="," close=")">
            #{rowData1}
        </foreach>
......
    </delete>

切记;隔开。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis-plus  mapper中foreach循环操作代码详解(新增或修改)

    .循环添加 接口处: 分别是 void 无返回类型 :有的话是(resultType)返回类型,参数类型(parameterType) list , 如: 在mapper文件中分别对应ID,参数类型和返回类型. 循环处理,如下: <insert id="insertPack" parameterType="java.util.List"> insert into t_ev_bu_pack ( PACK_CODE, BIN, PACK_PROD_TIME,

  • mybatis insert foreach循环插入方式

    mybatis insert foreach循环插入 @Insert("<script>" + "insert into driver_account_appeal_photo (appeal_id,appeal_photo_path) values\n" + "<foreach collection=\"photoList\" item=\"item\" index=\"index\&q

  • MyBatis中使用foreach循环的坑及解决

    目录 使用foreach循环的坑 正确写法为 忽现的Mybatis foreach失效记录 解决方案 使用foreach循环的坑 我们首先看一段MyBatis中使用foreach循环的sql: SELECT * FROM table where id in <foreach item="item" collection="ids1" open="(" close=")" index="0" separ

  • MyBatis 实现批量插入和删除中双层循环的写法案例

    本博客主要用两个例子来说明一下批量删除和批量插入双层循环的用法,顺便自己记录一下,方便以后使用. 1.批量删除 (1):dao中的写法: public int batchDelPrice(@Param("deleteList")List<Map<String, Object>> deleteList); 其中deleteList是一个Map的集合,Map中的Object是一个list集合,deleteList拼接如下: List<String> de

  • mybatis多个区间处理方式(双foreach循环)

    目录 mybatis多个区间处理 思路 多个foreach同时使用问题 应用场景 注意事项 解决方案 mybatis多个区间处理 如图:要实现车辆数不同区间查询条件 思路 a.前端传数组,数组里面放"1-5"String类型值             b.后端mybatis用双foreach循环解析     后端代码如下: <!--图例车辆数区间--> <if test="countCargoList != null and countCargoList.s

  • Mybatis批量更新三种方式的实现

    Mybatis实现批量更新操作 方式一: <update id="updateBatch" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="" close="" separator=";">

  • Mybatis的几种传参方式详解

    前言 前几天恰好面试一个应届生,问了一个很简单的问题:你了解过Mybatis中有几种传参方式吗? 没想到其他问题回答的很好,唯独这个问题一知半解,勉强回答了其中两种方式. 于是这篇文章就来说一说Mybatis传参的几种常见方式,给正在面试或者准备面试的朋友巩固一下. 单个参数 单个参数的传参比较简单,可以是任意形式的,比如#{a}.#{b}或者#{param1},但是为了开发规范,尽量使用和入参时一样. Mapper如下: UserInfo selectByUserId(String userI

  • mybatis错误之in查询 <foreach>循环问题

    目录 in查询 <foreach>循环问题 1.我就随便用了一种传list,再foreach循环 2.findByCaseNos(Long[] caseNos) 3.findByCaseNos(String name, Long[] caseNos) in查询和foreach标签使用 1.单参数List的类型 2.单参数Array的类型 3.多参数封装成Map的类型 4.嵌套foreach的使用 in查询 <foreach>循环问题 当我在做in查询的时候,发现在网上有很多种写法:

  • Mybatis游标查询大量数据方式

    目录 Mybatis游标查询大量数据 mapper层 service层 资源释放 Mybatis游标使用总结 什么是游标 Mybatis游标查询大量数据 对大量数据进行处理时,为防止内存泄漏情况发生,所以采用mybatis plus游标方式进行数据查询处理,当查询百万级的数据的时候,使用游标可以节省内存的消耗,不需要一次性取出所有数据,可以进行逐条处理或逐条取出部分批量处理 mapper层 使用Cursor类型进行数据接收 @Options,fetchSize设置为Integer最小值 @Sel

  • 强烈推荐MyBatis 三种批量插入方式的比较

    目录 前言 代码 拼接SQL的xml Service类 测试类 测试结果 结论 前言 数据库使用的是SQLServer,JDK版本1.8,运行在SpringBoot环境下 对比3种可用的方式: 反复执行单条插入语句 xml拼接sql 批处理执行 先说结论:少量插入请使用反复插入单条数据,方便.数量较多请使用批处理方式.(可以考虑以有需求的插入数据量20条左右为界吧,在我的测试和数据库环境下耗时都是百毫秒级的,方便最重要) 无论何时都不用xml拼接sql的方式. 代码 拼接SQL的xml newI

  • Mybatis中动态SQL,if,where,foreach的使用教程详解

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. MyBatis中用于实现动态SQL的元素主要有: if choose(when,otherwise) trim where set foreach mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 1.statement中直接定义使用动态SQL: 在statement中利用if 和 where 条件组合达到我们的需求,通过一个例子来说明: 原SQL语句

  • Mybatis Plus插件三种方式的逆向工程的使用

    本文源码:GitHub·点这里 || GitEE·点这里 一.逆向工程简介 在Java开发中,持久层最常用的框架就是mybatis,该框架需要编写sql语句,mybatis官方提供逆向工程,可以把数据表自动生成执行所需要的基础代码,例如:mapper接口,sql映射文件,pojo实体类等,避免基础代码维护的繁杂过程. 在实际的使用中,常用的逆向工程方式如上,mybatis框架,mybatis-plus框架,插件方式. 二.Mybatis方式 1.基础描述 基于xml配置的方式,生成mybatis

随机推荐