zoukankan      html  css  js  c++  java
  • Mybatis传多个参数的问题 及MyBatis报错 Parameter '0' not found. Available parameters are [arg1, arg0, param1 问题

    对于使用Mybatis ,传多个参数,我们可以使用对象封装外,还可以直接传递参数

    对象的封装,例如查询对象条件basequery对象

    <select id="getProductByProductQuery" parameterType="com.niulande.product.query.BaseQuery" resultMap="BaseResultMap">
    
        select
        <include refid="Base_Column_List" />
        from pd_product
        <include refid="whereSql"/>
      </select>
      <sql id= "whereSql" >
        <where>
          <if test="gameCode != null and gameCode != ''" >
            and game_type_coding = #{gameCode}
          </if>
          <if test="goodsTypeId != null">
            and goods_type_id = #{goodsTypeId}
          </if>
          <if test="accId != null">
            and account_id = #{accId}
          </if>
          <if test="delFlag != null">
            and del_flag = #{delFlag}
          </if>
        </where>
        limit #{start},#{rows}
      </sql>
    </mapper>

    直接传递参数

    例如:

    mapper方法

    selectByGameIdAndGoodsTypeId(Long gameTypeId, Long goodsTypeId);

    对应的xml文件方法:

    <select id="selectByGameIdAndGoodsTypeId" resultMap="BaseResultMap">
      select
      <include refid="Base_Column_List" />
      from pd_game_goods_type_mid
      where game_type_id = #{gameTypeId} AND goods_type_id = #{goodsTypeId}
    </select>

     第一:在select标签后就不再使用parameterType,因为这个标签只能指定一个参数,而两个参数及以上的,则不用再使用

    第二:在sql语句里面以上的写法是错误的(为了演示执行报错)

    会报错

    Parameter '0' not found. Available parameters are [arg1, arg0, param1, param2] 注意这里使用的mybatis的版本号 在MyBatis3.4.4版不能直接使用#{0}要使用 #{arg0}

    0是指参数的索引,从0开始。第一个参数是0,第二个参数是1,依次类推

    以下正确的写法:

    <select id="selectByGameIdAndGoodsTypeId" resultMap="BaseResultMap">
      select
      <include refid="Base_Column_List" />
      from pd_game_goods_type_mid
      where game_type_id = #{arg0} AND goods_type_id = #{arg1}
    </select>

     第三种:

    <select id="selectByGameIdAndGoodsTypeId" resultMap="BaseResultMap">
      select
      <include refid="Base_Column_List" />
      from pd_game_goods_type_mid
      where game_type_id = #{gameTypeId} AND goods_type_id = #{goodsTypeId}
    </select>

    刚刚说这样的会报错。解决办法,更改mapper方法

    加上@Param注解

    selectByGameIdAndGoodsTypeId(@Param("gameTypeId")Long gameTypeId, @Param("goodsTypeId") Long goodsTypeId)
  • 相关阅读:
    ios app 开发中ipa重新签名步骤介绍-备
    推荐IOS开发3个工具:Homebrew、TestFight、Crashlytics-b
    iOS开发工具——统计Crash的工具Crashlytics-备用
    摘要算法
    Xcode中将图片放入Images.xcassets和直接拖入的区别
    PHP面向对象的基本写法(区别于java)
    PHP 解决时差8小时的问题
    Java-Hirbernate小结大纲
    PHP替换数据库的换行符
    Java-strurs总结
  • 原文地址:https://www.cnblogs.com/shiyh/p/11377689.html
Copyright © 2011-2022 走看看