背景:
有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. 解密AI知识库

    许多人对AI知识库的理解是:只需将所有资料拖入AI客户端(如Cherry Studio),AI便会自动阅读并生成完美结论. 但实际体验后,大家发现AI知识库效果远不如预期,经常出现各种问题. 技术原理 ...

  2. 数据库事务回滚:FastAPI中的存档与读档大法

    title: 数据库事务回滚:FastAPI中的存档与读档大法 date: 2025/05/10 00:18:52 updated: 2025/05/10 00:18:52 author: cmdra ...

  3. 网络编程:反应堆_I/O模型和多线程模型实现

    多线程设计的几个考虑 在反应堆reactor框架设计中,main reactor线程是一个acceptor线程,这个线程一旦创建,会以event_loop形式阻塞在event_dispatcher的d ...

  4. f-string 高效的字符串格式化

    f-string,称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法,该方法源于PEP 498 – Literal Strin ...

  5. MySQL的表空间释放

    概述 最近为了对 MySQL 数据库磁盘占用瘦身,对一张近100GB表的历史数据进行了 delete 删除,删除了约2/3的数据,删除后发现该表占用的空间并未减少.通过下面语句查看该表的磁盘占用情况: ...

  6. E - Stamp

    题目链接 : E - Stamp (atcoder.jp) 题意:给定长为n的s串,m的t串,和一个长度为n的x串,问你能否操作任意次数的操作, 每次操作都可以使x中长度为m的存在串变为t,最后使得变 ...

  7. 用QT、QImage来制作简单图像处理工具

    用QT.QImage来制作简单图像处理工具 源码地址: https://github.com/dependon/simple-image-filter 下载地址(windows版本) github 下 ...

  8. Qt渲染漫谈(一)

    最近在看一些关于游戏引擎的东西,本来是有几个游戏的小点子,其实实现起来还挺麻烦的,想找个游戏引擎看看能不能码起来.辗转之后发现了很多2D引擎,其中国产的要数cocos2dx用的好像是比较广泛,但是好多 ...

  9. required a bean of type 'org.springframework.jms.core.JmsMessagingTemplate' that could not be found

    问题来源:   Spring Boot 项目集成 ActiveMQ. 报错内容:   Description:Field jmsTemplate in XXX required a bean of t ...

  10. 洛谷 P6006 [USACO20JAN]Farmer John Solves 3SUM G

    洛谷 P6006 [USACO20JAN]Farmer John Solves 3SUM G Problem 什么是3-SUM? 给你一个序列\(a\),求有多少组\((i,j,k)(1\le i&l ...