当xxxMapper的方法需要多个参数时,引发的异常
方法:
User getUser(Integer id, String username);
xml配置:1
2
3<select id="getUser" resultType="user">
select * from User where id = #{id} and username = #{username}
</select>
此时若调用getUser方法会抛出一个异常:
Cause: org.apache.ibatis.binding.BindingException: Parameter ‘id’ not found. Available parameters are [arg1, arg0, param1, param2]
造成原因:
由于mybatis会自动将参数封装成一个map,该map的key默认为param+参数位置,所以此时用id和username取值会报错
解决办法:1
2
3<select id="getUser" resultType="user">
select * from User where id = #{param1} and username = #{param2}
</select>
如果非要用#{id}和#{username}怎么办?
加上@Param注解1
User getUser(@Param("id")Integer id, @Param("username")String username);
当然这种解决办法让人感觉还是很麻烦,有没有简单一点的方式呢?
- 直接传入一个pojo对象
例: User getUser(User user);
- 若没有pojo怎么办?直接传入map
例: User getUser(Map<Object, Object> map);