• mybatis Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [0, 1, param1, param2]


    异常的出现:

    mapper层接口

    public interface EmpMapper {
        public Emp getEmpByIdAndName(Integer  id ,String name);
    }

    xml:sql语句

    <select id="getEmpByIdAndName" resultType="com.mybatis.bean.Emp" databaseId="mysql">
            select * from emp where id = #{id} and  name = #{name}
        </select>

    进行测试时,出现上述异常

    在mybatis中:

    1》单个参数:mybatis不会做特殊处理,#{参数名/任意名}:取出参数值。如:

    public Emp getEmpById(Integer id);
     <select id="getEmpById" resultType="com.mybatis.bean.Emp" databaseId="mysql">
            select * from emp where id = #{id}
        </select>

    2》多个参数:mybatis会做特殊处理。多个参数会被封装成 一个map,key:param1...paramN,或者参数的索引也可以,value:传入的参数值,

    #{}就是从map中获取指定的key的值;按照异常提示可用参数为 [0, 1, param1, param2],如:

    public Emp getEmpByIdAndName(Integer  id ,String name);
     <select id="getEmpByIdAndName" resultType="com.mybatis.bean.Emp" databaseId="mysql">
            select * from emp where id = #{0} and  name = #{1}
        </select>

    或者:

    <select id="getEmpByIdAndName" resultType="com.mybatis.bean.Emp" databaseId="mysql">
            select * from emp where id = #{param1} and  name = #{param2}
        </select>

    但是上面的处理不能见名知意,可以在接口处使用@Param注解,明确的指定参数封装成map中的key

    public Emp getEmpByIdAndName(@Param("id") Integer  id , @Param("name") String name);

    这时候就可以在xml文件中可以使用指定的参数名:

    <select id="getEmpByIdAndName" resultType="com.mybatis.bean.Emp" databaseId="mysql">
            select * from emp where id = #{id} and  name = #{name}
        </select>

    我们传入两个以上参数的时候,一般会将参数自己封装成对象。

     当我们传入一个集合或数组时,也是需要明确指定参数名,否则也会出现类似上面错误的异常,如

    mybatis Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [collection, list]

    补充:在官方文档的settings中,使用useActualParamName属性 , java8加上-parameters参数就可以实现在多参数时不用@Param注解

     idea中配置-parameters

  • 相关阅读:
    Dubbo 安装监控中心
    Docker安装RabbitMQ
    Python 3 字符串转MD5形式
    Ubuntu 安装jupyter notebook
    设计模式学习-合成模式
    ubuntu 下安装jupyter
    使用物理备份恢复数据库
    matplotlib 中的subplot的用法
    pandas中关于DataFrame的groupby方法,如何取出分组的ID(行名称)和ID对应的个数
    java编程中'为了性能'一些尽量做到的地方
  • 原文地址:https://www.cnblogs.com/tdyang/p/12717933.html
Copyright © 2020-2023  润新知