One minute
Week1009_tip
ARTS - Tip
关于MyBatis 报错的一个反思
今天开发一个功能,和别的系统功能重复,就直接复制了别的系统的Mapper,写好业务逻辑后测试,发现系统报异常:
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'id' in 'class java.lang.String'
意思是,String类里没有 名字为 id 的属性的get 方法。我有点奇怪,我调用Mapper的是一个 insert 方法,传的是业务对象,为什么会报String的id问题?有点奇怪,于是就进行了谷歌、百度大法,几乎所有的帖子都是如下:
传入的参数是String, parameterType=“String”,解决方法是:
解决方法一:把#{xxx}修改为 #{_parameter} 即可
解决方法二:可以在方法中提前定义:@Param(value=“xxx”) String xxx
虽然报错和我的一样,但是明显不是我这样的问题情形。于是又检查了一遍代码,发现了问题所在:
INSERT INTO sys_log(
id,
type,
title,
create_by,
create_date
) VALUES (
#{id},
#{type},
#{title},
#{createBy.id},
#{createDate}
)
居然是 #{createBy.id} 。 检查了下原来代码并没有CreateBy 对象且有属性是id, 所以觉得是原系统本来就有误。 处理就很简单了,删了id即可,代码正常运行。
教训
- 参考别的系统可以,最好不要直接复制。
- 就算复制也需要批判的使用,毕竟不是久经考验的公共库
- 不要偷懒,多自己实现
Read other posts