使用mybatis中遇到的一些坑(持续更新)

当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);

当然这种解决办法让人感觉还是很麻烦,有没有简单一点的方式呢?

  1. 直接传入一个pojo对象

    例: User getUser(User user);

  2. 若没有pojo怎么办?直接传入map

    例: User getUser(Map<Object, Object> map);