1.mybatis批量更新示例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cars.ict.rbpsems.mapper.BroadcastStatusMapper">
<!-- 批量插入数据 -->
<insert id="batchInsert" useGeneratedKeys="true" keyProperty="sid">
insert into broadcast_status (id, device_id, device_name, device_class, online_status, fault_state, ocupy_state, temp, station_code, bureau_code, create_time, modify_time ) values
<foreach collection="list" item="d" separator=",">
(
#{d.id},
#{d.deviceId},
#{d.deviceName},
#{d.deviceClass},
#{d.onlineStatus},
#{d.faultState},
#{d.ocupyState},
#{d.temp},
#{d.stationCode},
#{d.bureauCode},
#{d.createTime},
#{d.modifyTime})
</foreach>
</insert>
<!-- 批量更新数据 -->
<update id="batchUpdate">
<foreach collection="upList" item="d" separator=";">
update broadcast_status
<set>
<if test="d.deviceName != '' and d.deviceName != null">
device_name = #{d.deviceName},
</if>
<if test="d.deviceClass != '' and d.deviceClass != null">
device_class = #{d.deviceClass},
</if>
<if test="d.onlineStatus != '' and d.onlineStatus != null">
online_status = #{d.onlineStatus},
</if>
<if test="d.faultState != '' and d.faultState != null">
fault_state = #{d.faultState},
</if>
<if test="d.ocupyState != '' and d.ocupyState != null">
ocupy_state = #{d.ocupyState},
</if>
<if test="d.temp != '' and d.temp != null">
temp = #{d.temp},
</if>
<if test="d.modifyTime != null">
modify_time = #{d.modifyTime},
</if>
</set>
where bureau_code = #{bureauCode} and station_code = #{stationCode} and device_id = #{d.deviceId}
</foreach>
</update>
</mapper>
2.踩的坑:
1.@Param注解必须是mybatis下的否则会报错:
nested exception is org.apache.ibatis.binding.BindingException
有的开发者即使使用了@Param注解,还是会报这个异常,原因是在导包的时候,导入的是spring的@Param的注解包,在这里我们需要导入mybatis的@Param注解包,也就是org.apache.ibatis.annotations.Param;这个包
2.批量执行需要在配置文件中添加&allowMultiQueries=true
如果使用 Mybatis 框架对 MySQL 数据库进行批量更新或者插入操作,需要在连接数据库的 URL 加上 allowMultiQueries=true
,这样便可以执行批处理操作了,否则报sql语法错误。
可以参考:https://blog.csdn.net/weixin_43252521/article/details/125302997
3.不能在mybatis.xml文件中使用 -- 注释不然会报错:
Could not set parameters for mapping: ParameterMapping{property=‘s_id‘, mode=IN, javaType=class
4.对Date类型数据进行非空判断不能使用 != 只能用 != null 否则会报错:
Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
删除 creationDate != '' ,去掉Date类型与空字符串的比较,保留creationDate != null 就好了。
5.更新时,只对更新的数据的时间进行更新:
标签:总结,code,批量,Param,device,state,mybatis,id From: https://www.cnblogs.com/sensenh/p/17454187.html