背景:
有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. MCP-Playwright:AI自动化神器,一款超级好用的自动化测试框架!

    在软件开发与测试领域,自动化测试早已成为提升效率.保障质量的核心工具.然而,传统自动化测试框架往往面临代码编写繁琐.跨工具协作困难.操作复杂等痛点. 而今天,给大家介绍一款自动化测试工具:MCP-Pl ...

  2. 信息资源管理综合题之“如何利用PKI实现身份认证和抗抵赖和防篡改等安全措施 ”

    一.A企业在网上招标采购某种原材料,B是某个参与招标供应商 1.请讨论如何利用PKI(公钥基础设施),实现A企业接收B报价过程的身份认证.抗抵赖和防篡改等安全措施 二.答案 1.请讨论如何利用PKI( ...

  3. 操作系统综合题之“采用时间片轮转调度算法(Round-Robin,RR)执行,分时系统中的进程可能出现的状态变化”

    一.问题:某分时系统中的进程可能出现下图所示的状态变化,请回答下列问题: 1.根据图示,您认为该系统采用的是什么进程调度策略? 2.把图中所示的每一个状态变化的原因填在下表相应位置. 变化 原因 1 ...

  4. 操作系统综合题之“采用记录型信号量机制实现进程INPUT、PROCESS和OUTPUT的同步算法(代码补充)”

    1.问题:系统中有有三个进程INPUT.PROCESS和OUTPUT,共用两个缓冲区BUF1和BUF2.假期设BUF1中最多可放10个数据,现已放入了2个数据:BUF2最多可放5个数据.INPUT进程 ...

  5. Excel 数据显示到网页

    平时的, 数据分析过程, 会涉及很多表或者, 计算过程嘛, 有的时候, 需要将数据表啥的给同事查看和共享一下, 直接发送, 似乎不够优雅. 直接展示在网页往, 共小伙伴们查看和下载, 不就很香嘛. 其 ...

  6. Python基础 - 多线程(上)

    前面对 进程 一点认识, 通俗理解, 进程是操作系统(OS)进行资源调度分配的基本单元. 每个程序的至少就一个进程在OS中被"监控"着的哦. 然后围绕着多进程, 用消息队列共享全局 ...

  7. 保护网站免受黑客攻击:Web安全的重要性和保护方法

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  8. 一套基于 Bootstrap 和 .NET Blazor 的开源企业级组件库

    前言 今天大姚给大家分享一套基于 Bootstrap 和 .NET Blazor 的开源企业级组件库:Bootstrap Blazor. 项目介绍 BootstrapBlazor 是一套基于 Boot ...

  9. 开启PyTorch的第一天

    为积极响应导师的要求,我开启了我的深度学习之旅,成为炼丹大队的一员. 今天先是安装PyTorch,路子大家网上已经摸的很清了,我主要参考的是 https://blog.csdn.net/weixin_ ...

  10. asp.net core的launchSettings.json

    { "profiles": { "welcomeMiddleware": { "commandName": "Project&qu ...