mybatis的一种批量更新方法我

Posted 戈博小刀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于mybatis的一种批量更新方法我的主要内容,如果未能解决你的问题,请参考以下文章

技术分享 | 在MySQL对于批量更新操作的一种优化方式

oracle批量新增更新数据

使用临时表扩展属性批量更新

windows update能否帮我把windows server 2008R2更新到sp1或者s

sql语句将Excel中的一列批量更新到sql server中的一列中?

需要示例代码片段帮助