报错 nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘XXX‘ not found.

代码
/*Mapper*/
import org.apache.ibatis.annotations.Mapper;
import org.springframework.data.repository.query.Param;
@Mapper
public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
      List<AdminUserDO> getUserListByRoles(@Param("roleIds") List<String> roleIds);
}
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper">
        <select id="getUserListByRoles" resultType="cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO">
        SELECT
        r.id as id, role.name as roleName
        FROM
            system_users r
        LEFT JOIN system_user_role ur on ur.user_id = r.id
        LEFT JOIN system_role role on ur.role_id = role.id
        <where>
        <if test="roleIds !=null  and roleIds.size>0">
            and  role.code  in
            <foreach collection="roleIds" separator="," item="item" open="(" close=")">
                #{item}
            </foreach>
        </if>

        </where>
    </select>
    
</mapper>

代码看上去完全没问题, 调用之后 直接报错 nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘roleIds’ not found.

fine~~ 好叭 查找下原因

排查原因

更改【1】
/*Mapper*/
import org.apache.ibatis.annotations.Mapper;
import org.springframework.data.repository.query.Param;
@Mapper
public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
      List<AdminUserDO> getUserListByRoles( List<String> roleIds);
}
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper">
        <select id="getUserListByRoles" resultType="cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO">
        SELECT
        r.id as id, role.name as roleName
        FROM
            system_users r
        LEFT JOIN system_user_role ur on ur.user_id = r.id
        LEFT JOIN system_role role on ur.role_id = role.id
        <where>
        <if test="list !=null  and list.size>0">
            and  role.code  in
            <foreach collection="list" separator="," item="item" open="(" close=")">
                #{item}
            </foreach>
        </if>

        </where>
    </select>
    
</mapper>

ibatis默认使用list接受集合参数,如果不写参数指向 直接使用list 可行!

but,但是 如果需要传入多个参数 ,此法 又不行了。
说明不是根源所在呀。继续排查~~

更改【2】

经过仔细的检查, 发现!!! @Param 此注解引错包了!!! 就是这么离谱而又合理~~
在这里插入图片描述

我们需要使用的是ibatis框架中的@Param ,但是 却引入了 springframework框架中的@Param。🙃
在这里插入图片描述
引入org.apache.ibatis.annotations.Param 此路径下的才是正确的

/*Mapper*/
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
      List<AdminUserDO> getUserListByRoles(@Param("roleIds") List<String> roleIds);
}
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper">
        <select id="getUserListByRoles" resultType="cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO">
        SELECT
        r.id as id, role.name as roleName
        FROM
            system_users r
        LEFT JOIN system_user_role ur on ur.user_id = r.id
        LEFT JOIN system_role role on ur.role_id = role.id
        <where>
        <if test="roleIds !=null  and roleIds.size>0">
            and  role.code  in
            <foreach collection="roleIds" separator="," item="item" open="(" close=")">
                #{item}
            </foreach>
        </if>

        </where>
    </select>
</mapper>

测试后 ,此法可行。

总结

这是因为引错包路径而产生的错误

使用ibatis框架时 在mapper里引入的@Param注解 归属于【org.apache.ibatis.annotations.Param;

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值