Mybatis批量更新数据库与批量插入数据库(以oracle为例)

一、批量更新

1、普通写法(一条记录update一次,性能比较差,容易造成阻塞。不建议使用

复制代码
<update id="updateBatch"  parameterType="java.util.List">  
    <foreach collection="list" item="item" index="index" open="" close="" separator=";">
        update course
        <set>
            name=${item.name}
        </set>
        where id = ${item.id}
    </foreach>      
</update>
复制代码

2、使用case when语法来实现这个功能(推荐使用)

复制代码
UPDATE course
    SET name = CASE id 
        WHEN 1 THEN 'name1'
        WHEN 2 THEN 'name2'
        WHEN 3 THEN 'name3'
    END, 
    title = CASE id 
        WHEN 1 THEN 'New Title 1'
        WHEN 2 THEN 'New Title 2'
        WHEN 3 THEN 'New Title 3'
    END
WHERE id IN (1,2,3)
复制代码

这条sql的意思是,如果id为1,则name的值为name1,title的值为New Title1;依此类推。

mybatis的XML文件配置

复制代码
<update id="updateBatch" parameterType="list">
            update course
            <trim prefix="set" suffixOverrides=",">
             <trim prefix="peopleId =case" suffix="end,">
                 <foreach collection="list" item="i" index="index">
                         <if test="i.peopleId!=null">
                          when id=#{i.id} then #{i.peopleId}
                         </if>
                 </foreach>
              </trim>
              <trim prefix=" roadgridid =case" suffix="end,">
                 <foreach collection="list" item="i" index="index">
                         <if test="i.roadgridid!=null">
                          when id=#{i.id} then #{i.roadgridid}
                         </if>
                 </foreach>
              </trim>
              
              <trim prefix="type =case" suffix="end," >
                 <foreach collection="list" item="i" index="index">
                         <if test="i.type!=null">
                          when id=#{i.id} then #{i.type}
                         </if>
                 </foreach>
              </trim>
       <trim prefix="unitsid =case" suffix="end," >
                  <foreach collection="list" item="i" index="index">
                          <if test="i.unitsid!=null">
                           when id=#{i.id} then #{i.unitsid}
                          </if>
                  </foreach>
           </trim>
             </trim>
            where
            <foreach collection="list" separator="or" item="i" index="index" >
              id=#{i.id}
          </foreach>
</update>
复制代码

 二、批量插入mybatis的XML文件配置

复制代码
<insert id="insertMutil" parameterType="java.util.List">
        insert all
        <foreach collection="list" item="item" index="index"
            separator=" ">
            into SPSZMBB (ID, MBMC, HDCS, ZDHDS, SHID, FJS, SZSJ,SZRY)
            values
            (#{item.id},#{item.mbmc},#{item.hdcs},#{item.zdhds},#{item.shid},#{item.fjs},#{item.szsj},#{item.szry})
        </foreach>
        select 1 from dual
    </insert>
复制代码
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 MyBatis 中,可以使用 `<foreach>` 标签实现批量更新操作。Oracle 数据库中的批量更新可以使用 MERGE 语句实现。下面是一个示例: ```xml <update id="batchUpdate" parameterType="java.util.List"> MERGE INTO my_table t USING (SELECT #{item.id} AS id, #{item.name} AS name FROM dual) s ON (t.id = s.id) WHEN MATCHED THEN UPDATE SET t.name = s.name WHEN NOT MATCHED THEN INSERT (id, name) VALUES (s.id, s.name) </update> ``` 其中,`<foreach>` 标签用于遍历传入的 List,每次遍历都会执行一次 MERGE 语句。`#{item.id}` 和 `#{item.name}` 分别表示 List 中每个元素的 id 和 name 属性。 注意,这里使用了 Oracle 的 MERGE 语句实现批量更新和插入,可以一次性更新多条记录,但是需要注意数据的唯一性,避免重复插入数据。 ### 回答2: Oracle MyBatis批量更新是指一次性更新多条记录到Oracle数据库中。在使用MyBatis进行批量更新时,我们可以使用Mapper文件定义一个批量更新的SQL语句,并通过传递一个包含多条记录的List参数来实现批量更新操作。 首先,我们需要在Mapper文件中定义一个批量更新的SQL语句。语句中应包含更新的表名、更新的字段以及更新的条件。 例如: ```xml <update id="batchUpdate" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="BEGIN" close="; END;" separator=";"> UPDATE your_table SET column1 = #{item.column1}, column2 = #{item.column2} WHERE id = #{item.id} </foreach> </update> ``` 接下来,我们可以在Java代码中调用这个批量更新的Mapper方法。首先,我们需要创建一个包含多条待更新记录的List对象。 例如: ```java List<YourEntity> entities = new ArrayList<>(); YourEntity entity1 = new YourEntity(); entity1.setId(1); entity1.setColumn1("value1"); entity1.setColumn2("value2"); entities.add(entity1); YourEntity entity2 = new YourEntity(); entity2.setId(2); entity2.setColumn1("value3"); entity2.setColumn2("value4"); entities.add(entity2); ``` 然后,我们可以通过MyBatis的SqlSession对象来调用Mapper方法进行批量更新。 例如: ```java SqlSession session = sqlSessionFactory.openSession(); YourMapper mapper = session.getMapper(YourMapper.class); mapper.batchUpdate(entities); session.commit(); session.close(); ``` 执行上述代码后,MyBatis会将List对象中的每个元素映射到SQL语句中的对应参数,并批量执行更新操作。 综上所述,Oracle MyBatis批量更新可以通过定义Mapper文件中的批量更新SQL语句,并传递一个包含多条待更新记录的List参数来实现。 ### 回答3: OracleMyBatis都支持批量更新操作,可以在一次数据库请求中同时执行多个更新语句,以提高数据库操作的效率。 在Oracle中,可以使用SQL语句的批量更新功能来实现批量更新操作。在MyBatis中,可以使用foreach循环来实现批量更新操作。 具体实现步骤如下: 1. 使用MyBatis的foreach循环,将待更新的数据列表传递给SQL语句。 2. 在SQL语句中使用UPDATE语句,设置要更新的表、列和更新条件。 3. 通过MyBatis批量更新方法,将SQL语句和数据列表传递给数据库执行。 4. 数据库会根据更新条件,在一次数据库请求中同时执行多个更新操作。 批量更新操作可以减少数据库请求次数,提高数据库操作的效率。但需要注意的是,在批量更新操作中,要确保更新语句的正确性和数据的一致性,避免出现更新错误或数据不一致的情况。 总结来说,OracleMyBatis都提供了批量更新的功能,通过合理的编写SQL语句和使用MyBatis批量更新方法,可以实现高效的批量更新操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值