背景:
有1个项目,原来是用的mybatis 3.4.6版本,其中有一些插入mapper是这样写的:
Integer insertEntitySelectiveShard(@Param("tableSuffix") String tableSuffix,@Param("entity") XXXEntity entity);

对应的xml片段:

<insert id="insertEntitySelectiveShard" parameterType="com.cnblogs.yjmyzz.dao.entity.XXXEntity" useGeneratedKeys="true" keyProperty="id">

可能有同学说了,按官网文档的说法,keyProperty这里写法不规范:

既然是对象的属性,正确的写法应该是 keyProperty="entity.id",但该项目id生成方式,后来改用snowflake分布式id算法,在insert前entity.id上已赋值了,也就无需mybatis在insert后自动返回,关键的是3.4.6版本,遇到这种不规范的写法,并不会报错,所以也就一直这样跑着。

当升级到3.5.13后,运行报错:

org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.executor.ExecutorException: Could not determine which parameter to assign generated keys to. Note that when there are multiple parameters, 'keyProperty' must include the parameter name (e.g. 'param.id'). Specified key properties are [id] and available parameters are [tableSuffix, param1, entity, param2]
 
经过实测,结论如下:
1、只有1个参数时,加不加@Param("entity") 都不会报错
2、大于1个参数时,keyProperty必须写成规范的entity.id,否则报错
3、不管是几个参数,keyColumn=“id" 始终不会报错(也建议用该方式,前提是表上的主键字段名就是id)  

mybatis 3.x 升级时遇到的keyProperty问题小坑的更多相关文章

  1. Mybatis if test 中int判断非空的坑

    Mybatis 中,alarmType 是int类型.如果alarmType 为0的话,条件判断返回结果为false,其它值的话,返回true. <if test="alarmType ...

  2. mybatis逆向工程的text类型的一个小坑

    数据库如果配有text的数据类型的 mybatis生成逆向工程的时候会单独将text提取出来 ByExampleWithBLOBs 会生成上面后缀的查询和修改的语句 因此查询起来会产生没有必要的麻烦, ...

  3. mybatis关于Criteria的一点小坑。。。

    目录 在用Criteria时,相关代码如下: final RolePermissionExample example = new RolePermissionExample(); example.cr ...

  4. Mybatis全部查询遇到的返回类型的小问题

    在学习Mybatis3过程中遇到一个小问题,觉得需要注意就把它写下来了 在查询所有数据的时候方法是这样的 public List<User> findAll(){ ..... } 在它的u ...

  5. 解决使用Mybatis 传入多参数使用map封装遇到的 “坑”问题

    好久没来写些东西了,今天 我分享一下自己遇到的一个“小 坑”,这也许对您来说不是个问题,但是我还是希望对没有遇到过这类问题的朋友给个小小的帮助吧 是这样的,需求:需要实现根据多条件 且分页展示数据 1 ...

  6. Mybatis—动态sql拼接问题

    背景:使用Mybatis的最近半年,经常发现一些小坑,现在总结回顾下,记个小本本,不让它再来欺负我! 百度了许久,才留心到官网文档,比我的全,我很菜的! *************<if> ...

  7. mybatis 3.2.7 与 spring mvc 3.x、logback整合

    github上有一个Mybatis-Spring的项目,专门用于辅助完成mybatis与spring的整合,大大简化了整合难度,使用步骤: 准备工作: maven依赖项: <properties ...

  8. 关于MyBatis的工作流程

    1.从一个jdbc程序开始 public static void main(String[] args) { Connection connection = null; PreparedStateme ...

  9. 框架篇:Spring+SpringMVC+Mybatis整合开发

    前言: 前面我已搭建过ssh框架(http://www.cnblogs.com/xrog/p/6359706.html),然而mybatis表示不服啊. Mybatis:"我抗议!" ...

  10. MyBatis框架知识整理

    MyBatis框架 一.介绍: MyBatis实际上是Ibatis3.0版本以后的持久化层框架[也就是和数据库打交道的框架]! 和数据库打交道的技术有: 原生的JDBC技术---> Spring ...

随机推荐

  1. PACS千万家,好看耐用第一家---基于JAVA开发的跨平台PACS系统

    随着2011年成功上线全院级PACS,期间软件版本不断的更新和优化,也得到了不少HIS厂商及同行友商的支持,目前已有医院客户达到了300多家遍布全国各个省份,随着时间的推移,PACS老客户的数据量在不 ...

  2. 【HUST】网安|编译原理|期末复习概念梳理笔记

    纯自用,仅概念无题型,配合课本<编译原理 第4版>(ISBN: 978-7-121-31930-3)理解. 参考文献:刘铭. 编译原理 第4版. 北京:电子工业出版社, 2018.06. ...

  3. 【安装】Ubuntu 20.04下快速安装ROS2 Foxy

    参考博客 ROS2安装 有的地方原博主打错了,还没改过来,我按我自己的改好了. 有的地方比如github和raw.githubusercontent.com访问不了,我替换成能用的镜像源了,只求一键复 ...

  4. C# INotifyPropertyChanged Small Demo

    public class PChangeTest:INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyC ...

  5. codeup之解密

    Description 有一行电文,已按如下规律译成密码: A–>Z a–>z B–>Y b–>y C–>X c–>x - - 即第一个字母变成第26个字母,第i个 ...

  6. 通过JS模板引擎实现动态模块组件(Vite+JS+Handlebars)

    1. 引言 在上一篇文章<实现一个前端动态模块组件(Vite+原生JS)>中,笔者通过原生的JavaScript实现了一个动态的模块组件.但是这个实现并不完善,最大的问题就是功能逻辑并没有 ...

  7. L1-1、Prompt 是什么?为什么它能“控制 AI”?

    *--Prompt 入门 L1-1 想象一下,你只需输入一句话,AI 就能自动为你写一篇文案.生成一份报告.甚至规划你的创业计划.这种"对话即编程"的背后魔法,就是 Prompt ...

  8. post 报头注入

    1.user-agent 注入: 使用情况:万能密码无法绕过安全验证,用户名无法注入,通过查看源代码分析执行的动作. bp抓包修改user_agent的数据如下 User-Agent: ' or ud ...

  9. Jenkins自动化部署-----持续交付

    前言: 感谢之前带领过我的leader,让我能够知道什么是好的开发方法. 在很早之前就接触过敏捷开发.什么是敏捷开发,简单来说就是让软件可靠地,快速地发布出来的一种开发方法和技巧. 而敏捷开发中有许多 ...

  10. SmolVLA: 让机器人更懂 “看听说做” 的轻量化解决方案

    TL;DR 今天,我们介绍了 SmolVLA,这是一个轻量级 (450M 参数) 的开源视觉 - 语言 - 动作 (VLA) 模型,专为机器人领域设计,并且可以在消费级硬件上运行. 仅使用开源社区共享 ...