zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    转载别人(ZZ)创建要素集
    CAD转化为Shp
    VBS学习
    3度带/6度带
    头文件学习,GEOTIFF
    arcmap vba 生成3维侧棱 以及 createfeature与createfeaturebuffer的区别
    另类
    幸福人生讲座(七):怎样引导孩子立志
    幸福人生讲座(四):孝道与仁爱是根本
    幸福人生讲座(二):人生怎样才能幸福?
  • 原文地址:https://www.cnblogs.com/tdyang/p/12717933.html
Copyright © 2011-2022 走看看