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