账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    在不确定是插入还是更新的前提下,mybatis如何实现批量操作?
    47
    0

    一个集合中有多个对象,其中可能有一部分是需要更新,一部分是需要插入的,我应该如何处理才能让mybatis实现一次提交,批量操作呢?


    我自己有想过先查询,分组,然后批量操作,但是我觉得这种方案可能会出现并发问题。应该会存在这边查询完了,另外一个线程又去插入了数据,本来这边要做插入操作的,结果因为已经插入了一条,这边又插入重复的内容~

    之前的单条更新的时候是在mybatis中,先执行select语句,再根据结果让mybatis去选update或者是insert语句,如下所示:

    <selectKey keyProperty="count" order="BEFORE" resultType="int">
        select count(bh) from xxx
    </selectKey>
    <if test="count &gt; 0">
    </if test="count &gt; 0">
        /*执行更新的sql*/
    <if test="count == 0">
        /*执行插入的sql*/
    </if test="count == 0">
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 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。然后,你需要在你的业务逻辑中,根据你的实体对象来调用你的批量更新方法。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部