mybatis批量执行sql的处理 spring boot

news/2024/7/7 19:38:35

关于循环查询的方式,使用in方式

<foreach collection="ids" item="id" open="and business_id in (" separator="," close=")">
   #{id}
</foreach>

里面的变量,ids代表是一个list的string类型的,id代表循环里面的自定义变量。and business_id代表的是查询语句里面的sql语句。

在可以确定查询的id是多条的情况下,比如说可能是10条以上的话,最好的方式进行in的方式进行查询,避免打开或者关闭数据库的时候浪费大量的时间。

<select id="queryExpandFormExtByBusinessIds" parameterType="java.util.Map" resultType="com.iss.cms.fdrb.common.dao.entity.ExpandFormExt">
   select
   <include refid="expandColumn"/>
   from t_fdrb_expand_form_ext${tableNo} expand
   <where>
      expand.tenant_id = #{tenantId}
      <!--         <if test="templateCode!=null and templateCode!=''">-->
      <!--            template_code = #{templateCode}-->
      <!--         </if>-->
      <foreach collection="ids" item="id" open="and business_id in (" separator="," close=")">
         #{id}
      </foreach>
   </where>
</select>

需要特别注意下,这个传参不是实体类而是一个Map类型的,所以在定义方法的时候,要定义这个类型的

/**
* @Project:根据业务id查询拓展字段数据
* @Module: com.iss.cms.tshd
* @Deion:
* @author: hycaid
* @date: 2021/4/22 10:22
*/
List queryExpandFormExtByBusinessIds(List ids);

具体的实现类型是这样的,使用Map进行参数的传值

@Override
public List<ExpandFormExt> queryExpandFormExtByBusinessIds(List<String> ids) {
   ExpandFormExt expandFormExt = new ExpandFormExt();
   Map map=new HashMap<>();
   map.put("ids",ids);
   map.put("tenantId",expandFormExt.getTenantId());
   map.put("tableNo",expandFormExt.getTableNo());
   return this.sqlSessionTemplate.selectList(NAMESPACE + "queryExpandFormExtByBusinessIds", map);
}

通过实现的方式可以看出来,这个map进行动态的赋值操作,比如说,进行三个参数的传参处理。

批量插入的处理代码,sql语句如下:

<!-- 批量插入记录mysql -->
<insert id="insertBatchContractBalanceByMysql"  parameterType="java.util.Map" >
 insert into t_fdrb_bl_contract_balance${tableNo}(
       id,
       create_by_code,
       create_by_name,
       create_time,
       update_by_code,
       update_by_name,
       update_time,
       data_version,
       data_status,
       contract_code,
       contract_id,
       loan_date,
       balance,
       contract_type,
      loan_org_id,
      loan_org_code,
      loan_org_name,
      currency_name,
      currency_type,
      tenant_id
 )
 values
   <foreach collection ="list" item="item" separator =",">
      (#{item.id},
      #{item.createByCode},
      #{item.createByName},
      #{item.createTime},
      #{item.updateByCode},
      #{item.updateByName},
      #{item.updateTime},
      #{item.dataVersion},
      #{item.dataStatus},
      #{item.contractCode},
      #{item.contractId},
      #{item.loanDate},
      #{item.balance},
      #{item.contractType},
      #{item.loanOrgId},
      #{item.loanOrgCode},
      #{item.loanOrgName},
      #{item.currencyName},
      #{item.currencyType},
      #{item.tenantId})
   </foreach >

</insert>

对应的接口定义如下:

@Override
public void insertBatchContractBalanceByMysql(List<ContractBalance> list) {
   ContractBalance contractBalance = new ContractBalance();
   Map map = new HashMap<>();
   map.put("tableNo",contractBalance.getTableNo());
   map.put("list",list);
   this.sqlSessionTemplate.insert(NAMESPACE + "insertBatchContractBalanceByMysql", map);
}

通过上面的两段代码可以看出来,整个map的集合,然后map的第二个key、value传值的是一个list的集合,而不是实体类的形式,这样通过sql拼接的方式实现插入的处理,避免存在多条插入语句异常导致的部分插入失败的情况。

通过上面的两个例子可以延申出来,更新的时候也可以使用拼接sql的形式进行批量更新的操作。


http://lihuaxi.xjx100.cn/news/796591.html

相关文章

Code:美团代码托管平台的演进与实践

总第550篇2023年 第002篇美团代码托管平台经过长期的打磨&#xff0c;完成了分布式架构的改造落地&#xff0c;托管数以万计的仓库&#xff0c;日均Git相关请求达到千万级别。本文主要介绍了美团代码托管平台在迭代演进过程中面临的挑战及解决思路&#xff0c;希望对大家有所帮…

代码随想录day20

530. 二叉搜索树的最小绝对差 https://leetcode.cn/problems/minimum-absolute-difference-in-bst/ 中序遍历找最小值。 class Solution {int minInteger.MAX_VALUE;TreeNode prev;public int getMinimumDifference(TreeNode root) {if(root.left!null&&getMinimumDi…

【算法】程序猿必备算法

文章目录快速排序算法堆排序算法归并排序二分查找算法BFPRT(线性查找算法)DFS&#xff08;深度优先搜索&#xff09;BFS(广度优先搜索)Dijkstra算法动态规划算法朴素贝叶斯分类算法Floyd Warshall算法贝尔曼福特算法贪心算法拓扑排序最小生成树分治算法KMP暴力匹配更多来源快速…

element - - - - - Form表单的resetFields()方法没有生效?

万事如伊 大吉大利 Form表单的resetFields方法没有生效?1. 场景描述2. 问题分析3. 解决办法关于element组件&#xff0c;相信各位同学都不陌生。其各个组件不可谓不好用&#xff0c;能够快速的帮助开发人员进行排版布局&实现效果。 但是总会遇到一些不可避免的坑。 1. 场…

微信小程序+前端+天行数据垃圾图像识别接口API

文章目录 前言 步骤 1. 去到天行数据官网注册账号&#xff0c;去到接口的介绍网站 2. 去测试网站&#xff0c;先看看请求的格式 3. 小程序端我采用的是把网站上的url链接的网络图片转成base64编码后的形式作为传入参数&#xff0c;这里需要有点基础&#xff0c;因为只给上了…

毫米波雷达「增量」升级

随着智能驾驶进入高阶周期&#xff0c;基于视觉感知的冗余策略&#xff0c;也在走出两条不同路径&#xff1a;一是&#xff0c;拿掉传统角雷达&#xff0c;并增加激光雷达来作为补充&#xff0c;而去年补盲激光雷达的加入&#xff0c;让竞争也更加激烈&#xff1b;二是&#xf…

狂神说Springboot笔记

SpringBoot系列笔记:狂神说SpringBoot01:Hello,World!狂神说SpringBoot02:运行原理初探狂神说SpringBoot03:yaml配置注入狂神说SpringBoot04:JSR303数据校验及多环境切换狂神说SpringBoot05:自动配置原理狂神说SpringBoot06:自定义starter狂神说SpringBoot07:整合JDBC…

1145.binary-tree-coloring-game 二叉树着色游戏

问题描述 1145.二叉树着色游戏 解题思路 贪心策略:对二号玩家来说,想要取胜,选择染色节点只有三种可能:选择x的父节点,则通过深度优先搜索可以求得红色节点数,蓝色节点数为\(n\)减去红色节点数 选择x的左子节点,则通过dfs可以求得蓝色节点数,红色节点数为\(n\)减去蓝色…