MyBatis 的 @Param 注解那些事

踩坑!一个关于 MyBatis 接口方法传入多个参数的问题…

马上接近春招,最近在做一个Java电商项目的后台开发,持久层用的 MyBatis 框架,由于跨越了春节,项目先是在家里电脑上开发,途中转移到自己的笔记本上开发。

关于 MyBatis 传入多个参数的问题,有这样一个方法:

1
int updatePasswordByUsername(String username,  String password);

其 XML 实现:

1
2
3
4
5
6
<update id="updatePasswordByUsername" parameterType="map">
update mmall_user
set password = #{password},
update_time = now()
where username = #{username}
</update>

这样子写,在家里电脑运行的时候不会报错,但今天在笔记本上重新测试这个接口的时候却报了一个这样的错误:

Parameter ‘userId’ not found. Available parameters are [1, 0, param1, param2]

起初我以为是哪里参数写错了,检查了好几遍也没查出个所以然,最后依然动用搜索引擎直接找到了解决方案:@Param 注解

只要将上述方法改写成这样就OK了:

1
int updatePasswordByUsername(@Param("username") String username, @Param("password") String password);

或者,如果不想写 @Param 注解,那把 XML 改成这样也行:

1
2
3
4
5
6
<update id="updatePasswordByUsername" >
update mmall_user
set password = #{0},
update_time = now()
where username = #{1}
</update>

0 和 1 代表方法参数位置的索引,如果按索引绑定的话,parameterType也没必要写了。

目前暂不清楚为啥家里的 MyBatis 不加注解也能正常运行,也许是版本问题?总之写下本博文记录一下踩坑=_=