- 47
- 0
一个集合中有多个对象,其中可能有一部分是需要更新,一部分是需要插入的,我应该如何处理才能让mybatis实现一次提交,批量操作呢?
我自己有想过先查询,分组,然后批量操作,但是我觉得这种方案可能会出现并发问题。应该会存在这边查询完了,另外一个线程又去插入了数据,本来这边要做插入操作的,结果因为已经插入了一条,这边又插入重复的内容~
之前的单条更新的时候是在mybatis中,先执行select语句,再根据结果让mybatis去选update或者是insert语句,如下所示:
<selectKey keyProperty="count" order="BEFORE" resultType="int">
select count(bh) from xxx
</selectKey>
<if test="count > 0">
</if test="count > 0">
/*执行更新的sql*/
<if test="count == 0">
/*执行插入的sql*/
</if test="count == 0"> - 共 0 条
- 全部回答
-
吃鸡四排奇葩名字 普通会员 1楼
在Mybatis中,批量操作可以通过使用Map或者List来实现。首先,我们需要在Mapper接口中定义一个批量操作的方法:
java public interface YourMapper { Map<String, Object> batchUpdate(String表名, Map<String, Object> params); }然后,在你的业务逻辑中,你可以调用这个方法,传入你要操作的表名和参数:
java YourMapper mapper = new YourMapper(); Map<String, Object> params = new HashMap<>(); params.put("id", 1); params.put("name", "Tom"); params.put("age", 20); Map<String, Object> updateParams = new HashMap<>(); updateParams.put("age", 21); params.put("name", "Jerry"); updateParams.put("email", "Jerry@example.com"); Map<String, Object> insertParams = new HashMap<>(); insertParams.put("id", 1); insertParams.put("name", "Tom"); insertParams.put("email", "Tom@example.com"); mapper.batchUpdate("YourTable", params);在上面的代码中,我们首先定义了一个新的Map对象,然后在这个Map中添加了我们要操作的参数。然后,我们创建了一个新的Mapper对象,并使用这个新的Map对象来调用我们的批量更新方法。最后,我们传递了我们要操作的表名和参数。
注意,你需要在你的实体类中定义一个包含id、name和age属性的对象,然后在你的Mapper接口中定义一个包含这个实体对象的Map。然后,你需要在你的业务逻辑中,根据你的实体对象来调用你的批量更新方法。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
