`

关于mybatis的批量修改

 
阅读更多
List<ProductSkuVO> productSkuList = new ArrayList<ProductSkuVO>();
							//商品sku对象
							ProductSkuVO productSkuVO = null;
							for (int i = 0; i < jsonArray.size(); i++) {
								json = jsonArray.getJSONObject(i);
								//商品的sku编号
								skuId = json.getString("sku_id");
								//商品的购买数量
								stockNumStr = json.getString("stock_num");
								if(StrUtil.isNotNull(stockNumStr)){
									stockNum = new BigDecimal(stockNumStr);
								}
								
								productSkuVO = new ProductSkuVO();
								productSkuVO.setSKU_ID(skuId);
								productSkuVO.setSTOCK_NUM(stockNum);
								productSkuList.add(productSkuVO);
							}
							
							Map<String,Object> parameter = new HashMap<String, Object>();
							parameter.put("parameters", productSkuList);
							//循环update,回归库存
							int count=productSkuService.modifyProductSkuById(parameter);
							if(count == jsonArray.size()){
								jsonResult.put("code", -1); //批量执行成功
							}else{
								jsonResult.put("code", 1); //批量执行失败
							}

 

	public int modifyProductSkuById(Map<String,Object> map){
		int i=this.baseDao.update("updateSkuById", map, ProductSkuVO.class);
		return i;
	}

 

<!-- 下单后1个小时 库存回归 -->
	<update id="updateSkuById" parameterType="map">
		UPDATE 
			BIZ_PRODUCT_SKU 
		    SET STOCK_NUM = CASE
			<foreach collection="parameters" item="item">
				WHEN SKU_ID = #{item.SKU_ID} THEN STOCK_NUM + #{item.STOCK_NUM}
			</foreach>
			END
		WHERE SKU_ID IN 
			<foreach collection="parameters" item="item" open="(" separator="," close=")">
				#{item.SKU_ID}
			</foreach>
	</update>

 我这边是将list集合放到了map里面,然后通过键值对的方式用parameters 来批量修改,但我总觉得这段代码写的有问题,看看sql,能不能直接传一个list过去呢?好吧,我来试试..

 

 

7月22日:今天在测试这个功能的时候发现一个问题,当where条件相同的时候只能成功update一个。上面的代码中 假如有多个skuid是相同的那么它只能成功修改一个。我问了一个朋友,他说一条sql满足批量更新的操作,所以我更改了sql语句,如下;

 

<!-- 下单后1个小时 库存回归 -->
	<update id="updateSkuById" parameterType="java.util.List">
	   <foreach collection="list" item="item" index="index" open="" close="" separator=";">
               UPDATE 
			     BIZ_PRODUCT_SKU 
                <set>
                  STOCK_NUM=STOCK_NUM+#{item.STOCK_NUM}
                </set>
                where SKU_ID = #{item.SKU_ID}
         </foreach>
	
	</update>
 

 

分享到:
评论

相关推荐

    mybatis批量添加

    mybatis批量添加的时候报错总结报错 parameter'_frch_item_0 not found

    mybatis批量增删改.txt

    mybatis 框架批量增删改代码 示例 含java与xml

    MyBatis批量插入Update

    需要注意的是,MyBatis批量插入可能会出现内存不足的问题,因此需要提前修改MySql的配置文件,增加max_allowed_packet的值以避免内存不足的问题。 MyBatis批量插入是一种高效的数据插入方式,可以大大提高插入速度...

    mybatis plus 5种批量操作性能测试

    MyBatis Plus 是 MyBatis 的一个扩展,它在 MyBatis 的基础上提供了更多的便捷功能,包括但不限于批量操作。在数据库交互中,批量操作能够显著提高效率,减少数据库连接的开销。本测试主要探讨了 MyBatis Plus 中的...

    mybatis数据操作(增删改查+批量操作)

    在"mybatis数据操作(增删改查+批量操作)"这个主题中,我们将深入探讨如何利用MyBatis进行基本的数据操作,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select),以及如何执行批量操作。...

    Mybatis批量修改的操作代码

    Mybatis批量修改操作代码详解 Mybatis是一款流行的持久层框架,提供了批量修改操作的功能。本文将详细介绍Mybatis批量修改的操作代码,包括批量修改的基本语法、参数说明、trim标签的使用等。 一、基本语法 ...

    MyBatis批量添加、修改和删除

    批量修改同样通过 `session.insert()` 方法完成,但需要注意,这里可以使用 `&lt;update&gt;` 标签。示例中提供了两种方式: - 实例1: 这里通过 `id` 的集合来更新特定记录的 `name` 字段。XML 映射文件中的 `&lt;update&gt;`...

    Mybatis Plus 自定义批量插入或批量更新(根据唯一索引)

    Mybatis Plus 是 Mybatis 的一个扩展工具,它在 Mybatis 的基础上提供了许多便捷的功能,包括自动 CRUD 操作、条件构造器、批量操作等。在实际的项目开发中,批量插入和批量更新是常见的数据处理场景,尤其是在处理...

    mybatis 批量插入 嵌套select.pdf

    这个问题的描述是关于如何在MyBatis中正确地执行一个批量插入操作,其中一个字段的值依赖于对同一张表的SELECT查询结果。 原始的XML映射文件中的SQL插入语句尝试在FROM子句中直接更新目标表'chat_messages',这是不...

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

    Mybatis批量更新三种方式的实现 Mybatis是一款流行的持久层框架,它提供了强大的数据库交互能力。其中,批量更新是一种常见的操作,能够提高数据库操作的效率。下面将介绍Mybatis批量更新三种方式的实现。 方式一...

    SpringBoot整合Mybatis连接SQL Server 跨库批量插入

    本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...

    详解MyBatis批量插入数据Mapper配置文件的写法

    这篇文章将详细讲解如何在MyBatis的Mapper配置文件中实现批量插入。 首先,批量插入的数据通常来源于一个集合,如List对象,因此在Mapper接口中,我们需要定义一个方法接收这样的参数。例如,我们可以创建一个`...

    Mybatis批量更新报错问题

    本文将详细分析Mybatis批量更新的报错问题及其解决方法。 首先,报错可能由于不支持批量更新操作的JDBC配置引起。在MySQL中,如果不开启`allowMultiQueries`参数,Mybatis尝试执行包含多个SQL语句的批量更新时,会...

    mybatis postgresql 批量删除操作方法

    MyBatis PostgreSQL 批量删除操作方法 MyBatis 是一个基于 Java 的持久层框架,它提供了一个简单的方式来交互数据库。在本文中,我们将介绍如何使用 MyBatis 实现 PostgreSQL 批量删除操作。 PostgreSQL 简介 ...

    Mybatis 中的sql批量修改方法实现

    Mybatis,作为一款强大的Java持久层框架,提供了便捷的SQL映射功能,其中包括批量修改的方法。本篇文章将深入探讨如何在Mybatis中利用`&lt;foreach&gt;`标签实现SQL批量修改。 批量更新通常比单条更新更有效率,因为它...

    mybatisr代码生成插件(中文注释,生成批量插入及修改)

    在这个自定义版的MBG插件中,它特别加入了中文注释,使得代码更符合中国开发者阅读习惯,并且扩展了功能,支持批量插入和批量修改操作,这对于处理大量数据时非常实用。此外,它还能处理一对多和多对多的关系映射,...

    Mybatis中使用updateBatch进行批量更新

    "Mybatis中使用updateBatch进行批量更新" Mybatis是一个基于Java的持久层框架,提供了批量更新的功能,以提高数据库操作的效率。在Mybatis中,可以使用updateBatch方法来进行批量更新,下面将详细介绍Mybatis中使用...

    Mybatis最新版

    10. 插件扩展:Mybatis支持插件扩展,通过实现Interceptor接口,可以拦截并修改Mybatis的执行过程,如PageHelper分页插件。 综上所述,Mybatis 3.2.8版本不仅提供了基本的SQL映射功能,还具备强大的动态SQL支持、...

    mybatis-plus 实践及架构原理

    Mybatis-Plus不修改用户写的SQL语句,而是通过扩展的方式,例如插件,来增强原有功能。 7. Mybatis-Plus的适用场景: Mybatis-Plus非常适合于那些项目中有大量的单表CRUD操作的场景。开发者在这些场景下使用...

    MyBatis Plus全套学习资料(带源码和笔记)

    MyBatis Plus是一个基于MyBatis框架的扩展工具,它旨在简化常见的MyBatis操作,如插入、更新、删除和查询。这套学习资料包含了MyBatis Plus的源码和笔记,是深入理解并掌握该框架的宝贵资源。下面将详细阐述MyBatis ...

Global site tag (gtag.js) - Google Analytics