MyBatis中进行批量更新(MySQL数据库)

来源:互联网 发布:还原备份软件 编辑:程序博客网 时间:2024/06/01 03:58

一、简介

在程序开发过程中,往往会遇到需要更新一批数据(批量更新)的情况,这种情况通常有两种方法进行解决。这两种方法各有优点与缺点,这就需要我们根据实际业务需要进行取舍。

二、操作

1、逐条更新(不推荐)

直接在程序上使用循环对数据库进行数据更新,使用这样的方式是最简单、最不容易出错的方式。也不会出现因为一条数据更新失败,而导致全部数据更新失败。

执行Java代码如下:

updateBatch(List<Demo> demos){     for(User user : users){         try{             demoMapper.update(user);        } catch(Exception e){            //如果更新失败可以做一些其他的操作,比如说打印出错日志等            logger.error("更新数据失败,失败数据为:{},异常信息为:{}", user, e.getMessage())        }    }}

执行SQL语句如下:

update     userset    mark = #{mark}  where     id = #{id}

虽然这样做简单省事,但是会产生一个较大的问题,那就是执行效率问题。由于是循环执行,数据库连接连接释放,再连接再释放,知道循环结束。大量的占用数据库连接池内连接,从而影响执行效率。

2、批量更新(推荐)

批量更新是使用SQL的批量更新方式进行,使用 CASE ... WHEN ... THAN... 的语法进行批量操作。我们借助 MyBatis<foreach> 语法进行SQL拼接成可以批量更新的SQL语句 。

我们以将表中特定id数据的mark字段修改为制定值为例。

Java程序中Dao层代码写法如下:

public intupdateBatch(List<User> idList);

MyBatis的xml文件中书写方法如下:

<update id="updateBatch" parameterType="java.util.List">    update        demo    set        mark = CASE        <foreach collection="list" item="m" index="index">            <if test="m.mark!= null and m.mark!= ''">                when id = #{m.id} then #{m.mark}            </if>        </foreach>        END    WHERE        id in        <foreach collection="list" item="m" index="index" open="(" separator="," close=")">            #{m.id}        </foreach></update>

按照如上方式,执行SQL过程中就会一次性将数据批量更新入数据库中。

之所以可以使用 CASE ... WHEN 方式进行批量更新,主要是因为 in 关键字的特性。 使用 in 关键字作为条件进行读操作或者是写操作时,实际相当于多个 or 条件进行叠加。

使用 in 关键字的查询语句

SELECT id FROM user WHERE id in (1, 2, 3);

与如下使用 or 关键字的查询SQL等价

SELECT id FROM user WHERE id = 1 or id = 2 or id = 3

假设 in 关键字中有 m 个条件,实际进行执行过程时,就会执行 m 次,最后将执行结果合并到一起(读写操作都是如此)。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 龙州房价 龙州货运 巴南龙州湾酒店 龙州胡志明展馆 南宁到龙州要多久 广西龙州房价 龙州左江风景区 龙州股份 龙州旅游 南宁到龙州 龙州旅行 南宁去龙州 南宁至龙州 龙州印刷厂 龙州婚介 龙州房地产 龙州装饰 龙州在哪 靖边龙州丹霞地貌 龙州梯田 广西龙州铁木砧板 龙州大街 龙州特色菜 龙州乡镇 今日龙州 龙州女人 南宁到龙州多少公里 中国龙州 龙州攻略 龙州一中 龙州蛋糕店 南宁到龙州车票 龙州甘蔗 龙州经济 广州龙州 龙州是哪里的 龙州距离南宁 上海龙州苑 珠海到龙州 龙州景点 龙州有什么景点