mybatis的一种批量更新方法【我】

接手一个项目,项目主要架构用的 servlet 3.0 + spring + mybatis

其中发现一个问题:

操作数据时,批量插入可以,批量更新,使用各种写法都无法成功,直接报 mybatis转换异常等等,最后解决方法是所有批量更新都用如下写法:

userXML.xml文件
userXML.xml文件

<!-- 更新user表 -->
<insert id="updateUser" parameterType="java.util.List">
        INSERT INTO USER (
                ID,
                USER_NAME,
                PASSWORD,
                UP_DATE,
                STATUS
            )
        VALUES
        <foreach collection="list" item="item" index="index" separator="," >
         (
            #{item.id}, //主键(用这种方法必须要有主键)
            #{item.userName},
            <choose>
                <when test="item.innerPartyId != null and item.innerPartyId != ‘‘">
                    #{item.password},
                </when>
                <otherwise>
                    null,
                </otherwise>
            </choose>
            NOW(), //当前时间
            ${2} //纯数字
        )
        </foreach >

         ON DUPLICATE KEY UPDATE //主键id存在就是插入,不存在就是更新

        ID=VALUES(ID),
        USER_NAME=VALUES(USER_NAME),
        PASSWORD=VALUES(PASSWORD),
        UP_DATE=VALUES(UP_DATE),
        STATUS=VALUES(STATUS)
</insert>

java代码:

baseDao:

protected int insert(Object routeObject, String statement, Object parameter) {
        return this.sqlSessionDaoSupport.getSqlSession().insert(routeObject, statement, parameter);
    }

测试代码:

List<Object> paramList = new ArrayList<>();
    User u1 = new User();
    User u2 = new User();
    paramList.add(u1);
    paramList.add(u2);

    this.insert("userXML", "userXML.updateUser", paramList);

第一个参数:xml文件名称,

第二个参数:文件中的方法名,

第三个参数:参数list

原文地址:https://www.cnblogs.com/libin6505/p/10751552.html

时间: 2024-08-30 15:01:12

mybatis的一种批量更新方法【我】的相关文章

mybatis学习之路----批量更新数据两种方法效率对比

原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方式有两种, 一种用for循环通过循环传过来的参数集合,循环出N条sql, 另一种 用mysql的case when 条件判断变相的进行批量更新 下面进行实现. 注意第一种方法要想成功,需要在db链接url后面带一个参数  &allowMultiQueries=true 即:  jdbc:mysql:

十几万条数据的表中,基于帝国cms 。自己亲身体验三种批量更新数据的方法,每一种的速度是什么样的

需求是 上传Excel 读取里面的数据.根据Excel中某一个字段,与数据表中的一个字段的唯一性.然后把 Excel表中数据和数据库表中数据一次更改.本次测试一次更新31条数据. 本次测试基于帝国cms 方法1 用一个for徐循环把读取的数据放在一个数组中然后在十几万条的数据表中逐条查询更改,用时35s: $numArr = count($arr);$m = ceil($numArr/10000);for($i=1;$i<=$numArr;$i++){ $n = $i*10000; $j = $

2500-使用MyBatis操作MySQL进行批量更新的注意事项

原则上一条SQL只更新一条数据库操作,但有时需要批量操作数据,特别是一些DML语句,在操作数据库时,数据库会报出异常,不允许混合语句,此时需要额外配置进行兼容. 例如: Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server ve

MySql批量更新方法

准备数据 表 user(用户).dept(部门) 1:更新符合单个条件的某个字段的一条数据 update user u set u.name = '测试' where u.id = "" 2:in 更新多条数据 update user u set u.name = '测试' where u.id in ("", "", "") 3:符合多个条件更新内容不同的多个字段 update user u set u.address =

oracle使用case或decode语句实现批量更新

最近使用oracle数据库做开发,一开始只需要批量更新多条记录中的某一个字段,后来需求变更需要对多个字段进行更新,故查看资料得到如下内容,分享给大家.我在oracle 10g环境下,都能跑通. 批量更新一个字段: 1 UPDATE categories 2 SET display_order = CASE id 3 WHEN '1' THEN 3 4 WHEN '2' THEN 4 5 WHEN '3' THEN 5 6 END 7 WHERE id IN ('1','2','3'): 或者更普

c#mysql批量更新的两种方法

总体而言update 更新上传速度还是慢. 1:  简单的insert  速度稍稍比MySqlDataAdapter慢一点 配合dapper 配置文件 <?xml version="1.0" encoding="utf-8"?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Versio

mybatis执行批量更新batch update 的方法

1.数据库连接必须配置:&allowMultiQueries=true 我的配置如下:jdbc:mysql://10.20.13.16:3306/CALENDAR?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true 2.批量修改并加判断条件(修改字段可选) <!-- 批量更新赛程 --> <update id="updateMatchs" parameterType=&q

Mybatis批量更新&lt;转&gt;

Mybatis批量更新 批量操作就不进行赘述了.减少服务器与数据库之间的交互.网上有很多关于批量插入还有批量删除的帖子.但是批量更新却没有详细的解决方案. 实现目标 这里主要讲的是1张table中.根据不同的id值,来update不同的property. 数据表:1张.Tblsupertitleresult.错题结果统计. 表结构: 表中每一条数据必须通过两个字段来确定:userHhCode+titleId 需要批量更新的字段是:correctDate,result,checkState. 1批

mybatis 实现批量更新

更新单条记录 1 UPDATE course SET name = 'course1' WHERE id = 'id1'; 更新多条记录的同一个字段为同一个值 1 UPDATE course SET name = 'course1' WHERE id in ('id1', 'id2', 'id3); 更新多条记录为多个字段为不同的值 比较普通的写法,是通过循环,依次执行update语句. Mybatis写法如下: 1 2 3 4 5 6 7 8 9 <update id="updateBa