zoukankan      html  css  js  c++  java
  • mybatis {arg0} 与 {0}

    解决方案:

    MyBatis的XML的配置文件中声明设置属性的useActualParamName参数值为假

    <setting name="useActualParamName" value="false" />

    代码展示:

    Dao层函数

    User getUserBys(int id,String name);

    对应的mapping.xml

     
    <select id="getUserBys" resultType="model.User">
     
    select * from user where id = #{0} and name=#{1}
     
    </select>

    这种方法应该是对的,但是如果你使用的是mybatis3.4.2或者之后的版本,就会产生绑定异常:

    org.apache.ibatis.binding.BindingException: Parameter '0' not found. Available parameters are [arg1, arg0, param1, param2]

    从异常可以看出在没有使用@参数注解的情况下,传递参数需要使用

    #{}为arg0 - #{} ARGN#或者{}参数1 - #{} paramn

    • 更换下mapping.xml中的代码
    <select id="getUserBys" resultType="model.User">
     
    select * from user where id = #{arg0} and name=#{arg1}
     
    </select>

    此时代码就会正常运行


    下面贴上3.4.1以及之前版本的绑定异常信息:

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

    可以发现3.4.1版本中传递参数可以使用#{0} - #{N}

    问题原因

    MyBatis的通过XMLConfigBuilder类来加载配置文件中的各项参数

    • 3.4.2版本之前设置属性中useActualParamName参数的默认值为flase 
      XMLConfigBuilder.class的settingsElement方法中的源代码
    configuration.setUseActualParamName(booleanValueOf(props.getProperty("useActualParamName"), true));
    
    • 3.4.2版本之后设置属性中useActualParamName参数的默认值为true 
      XMLConfigBuilder.class的settingsElement方法中的源代码
    configuration.setUseActualParamName(booleanValueOf(props.getProperty("useActualParamName"), false));
  • 相关阅读:
    STL笔记之【map之总概】
    STL笔记之set
    Effective C++笔记之Item49【了解new-handler的行为】
    明成软件条形码打印设置
    将Excel数据导入到SqlServer及导入时数据类型转换失败解决方案
    远程桌面无法复制粘贴传输文件解决办法
    DELPHI如何读取cxcheckcombobox中的值
    Delphi 插入Excel图片和值
    SQL 查询语句先执行 SELECT?
    Linux之xargs命令传递参数的一个过滤器
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/9922236.html
Copyright © 2011-2022 走看看