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

  • 相关阅读:
    pytest.mark.parametrize里面indirect参数详细解释
    linux环境安装python环境
    gitlab怎么给别人新增项目权限
    VMware虚拟机下的CentOS7如果Ping不通百度,解决办法
    ip configuration could not be reserved (no available address timeout etc.)虚拟机连接不上网卡解决办法
    虚拟机安装教程
    auto_now与auto_now_add之间的区别
    【二分答案】洛谷P2678 [NOIP2015 提高组] 跳石头/P1824 进击的奶牛/P2440木材加工/P1873 砍树
    团体程序设计天梯赛PTA L2-021点赞狂魔
    团体程序设计天梯赛PTA L2-020功夫传人
  • 原文地址:https://www.cnblogs.com/tdyang/p/12717933.html
Copyright © 2011-2022 走看看