MyBatis-No setter found for the keyProperty id

引入

前几天出现的 log4j2 的安全漏洞问题,导致公司的各个项目组就在疯狂的补安全漏洞,我们也不意外的加入到了这个行列之中,开始之前从未考虑的地方: 引用组件低版本升级高版本

其他的漏洞都是大差不差的升级组件,解决组件不同版本之间的差异问题,保证线上功能稳定的情况下,升级各式各样的组件。


复现

其中安全漏洞升级的一部分就是关于 MyBatis 的升级,升级到最新版本的 3.5.8 时,在本地测试环境就被复现了出来。

1
org.apache.ibatis.executor.ExecutorException: No setter found for the keyProperty 'id'

出现这个异常的原因在于 DB 表中的主键采用了自增的方式,但是在 bean 中却没有定义 id 属性,在升级对应的 MyBatis 版本后就会出现这个异常。


解决方案

  1. 删除对应的配置
    Mapper 文件配置中删除 keyProperty="id" 的配置。
    原因在于,主健采用了自增的方式只需要配置: useGeneratedKeys="true" 即可。
    keyProperty="id" 的意思是,将主键的中的数据 放到传入对象的成员变量 id 里面,因为在对像的成员变量中没有定义属性 id ,也没有对应的 get、set 方法,所以会报错: org.apache.ibatis.executor.ExecutorException: No setter found for the keyProperty 'id'
    如果 db 的表中没有指定主键:可以用属性 keyColumn 。可以从表中 keyProperty 字段的数据传入对象的成员变量 keyColumn 中。

  2. 添加对应的属性
    bean 中定义不存在的 id 属性。

引用


个人备注

此博客内容均为作者学习所做笔记,侵删!
若转作其他用途,请注明来源!