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)
  • 相关阅读:
    Electron+Vue开发跨平台桌面应用
    vue-cli3.0 脚手架搭建项目的过程详解
    dart-sass与node-sass介绍
    创建vue-cli4项目,报错 ERROR command failed: yarn
    CSS Grid 网格布局教程
    总结5种自适应方式
    前端实战:electron+vue3+ts开发桌面端便签应用
    SDK 和 API 的区别是什么?
    Pinia 快速入门
    返回数组中最大的三个数
  • 原文地址:https://www.cnblogs.com/shiyh/p/11377689.html
Copyright © 2011-2022 走看看