引入
前几天出现的 log4j2
的安全漏洞问题,导致公司的各个项目组就在疯狂的补安全漏洞,我们也不意外的加入到了这个行列之中,开始之前从未考虑的地方: 引用组件低版本升级高版本。
其他的漏洞都是大差不差的升级组件,解决组件不同版本之间的差异问题,保证线上功能稳定的情况下,升级各式各样的组件。
复现
其中安全漏洞升级的一部分就是关于 MyBatis
的升级,升级到最新版本的 3.5.8
时,在本地测试环境就被复现了出来。
1 | org.apache.ibatis.executor.ExecutorException: No setter found for the keyProperty 'id' |
出现这个异常的原因在于 DB
表中的主键采用了自增的方式,但是在 bean
中却没有定义 id
属性,在升级对应的 MyBatis
版本后就会出现这个异常。
解决方案
删除对应的配置
在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
中。添加对应的属性
在bean
中定义不存在的id
属性。
引用
个人备注
此博客内容均为作者学习所做笔记,侵删!
若转作其他用途,请注明来源!