首页 > 其他分享 >mybatis批量更新和踩坑总结

mybatis批量更新和踩坑总结

时间:2023-06-03 16:55:13浏览次数:37  
标签:总结 code 批量 Param device state mybatis id

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

相关文章

  • MybatisPlus02_IService和各种插件
    前言上次忘了把application.yml放出来,以至于没有配置日志,log-impl后面的值表示输出日志到控制台。mybatis-plus:configuration:log-impl:org.apache.ibatis.logging.stdout.StdOutImplglobal-config:db-config:id-type:automapper-locations:c......
  • 大件货运系统源码,技术架构:spring boot、mybatis、redis、vue、element-ui
    网络货运平台源码网络货运平台的功能网络货运是指利用互联网平台,通过物流配送的方式进行商品销售和物流运输的一种新型商业模式。这种模式将传统的货运模式与互联网技术相结合,通过网络平台进行交易、物流配送和结算等一系列流程,从而实现货物的快速、高效、便捷地运输。技术架构:spr......
  • pandas str to int 批量转换
    df[['列名1','列名2']]=df[['列名1','列名2']].apply(pd.to_numeric,errors='ignore')pandas.to_numeric补充用法:pandas.to_numeric(arg,errors=’raise’,downcast=None)参数:此方法将采用以下参数:arg:列表、元组、一维数组或系列。errors:{‘ig......
  • C盘清理总结 1.0
    C盘清理总结1.0备注:1->查看2->修改3->疑难杂症4->小问题目录C盘清理总结1.0一、查看1.1cmd命令关闭休眠1.2怎么看电脑是不是双硬盘1.3如何查看自己电脑系统有没有被激活?1.4win7磁盘容量显示条怎么不见了?1.5三大文件hiberfil.sys,pagefile.sys,swap......
  • postman 参数化构建 批量测试
    postman之前一直只是使用简单测试接口。参数引用注意下:request参数获取:varreqObj=JSON.parse(request.data);reqObj.参数字段response参数获取:varjsonObject=JSON.parse(responseBody);jsonObject.参数字段postman内置了几个变量可以用来直接获取请求的值或者......
  • 分布式医疗云平台(项目功能简介截图)【系统管理(科室管理、用户管理、角色管理、菜单管理
    项目功能截图1.系统管理 1.1.科室管理 1.2、用户管理1.3、角色管理 1.4、菜单管理  1.5、字典管理1.6、通知公告管理 1.7、登陆日志管理 1.8、操作日志管理 1.9、检查费用设置 1.10,挂号费用设置 项目功能截图1.系统管理 1.1.科室管理1.1.1、科室查询 1.1.2、科室添加......
  • 2023年上半年软件设计师中级学习总结(超详细)
    目录前言一、背景1.1上次考试感受:1.2这次考试感受:1.3方法:二、过程2.1计算机网络概论计算机组成数据表示相关知识校验码相关知识计算机体系结构网络体系结构OSI/RM和TCP/IP计算机安全性可靠性性能评价2.2程序设计语言基础知识编译和解释的区别编译过程图示编译各个阶段常见的错误......
  • 人工智能GPT科普知识的简单总结
    人工智能GPT相关知识的简单总结背景工作已经很久,工作十几年来有过好多波新的技术浪潮.但是每次都离技术前沿比较远.最近发现只低头拉车是一个没有前途的行为.人生很短,选择很重要,不仅要低头拉车,还要抬头看路.感谢网上的资料.人工智能的起源人工智能起源于上......
  • Oracle 死锁与慢查询总结
    查看死锁SELECTs.sid"会话ID",s.lockwait"等待锁",s.event"等待的资源/事件",--最近等待或正在等待的资源/事件DECODE(lo.locked_mode,0,'尚未获得锁',1,NULL,2,'行共享锁',3,'行排它锁',4,'共享表锁',5,'共享行排它锁',6,......
  • Python asyncio之协程学习总结
    实践环境Python3.6.2什么是协程协程(Coroutine)一种电脑程序组件,该程序组件通过允许暂停和恢复任务,为非抢占式多任务生成子程序。协程也可以简单理解为协作的程序,通过协同多任务处理实现并发的函数的变种(一种可以支持中断的函数)。下面,我们通过日常生活场景为例,对什么是协程进行说......