Parameter 'goodsName' not found. Available parameters are [ param1, goods]

本文解析了MyBatis在参数传递过程中常见的错误,详细解释了如何使用@Param注解来正确命名参数,确保参数能准确地传入SQL语句中,避免因参数名不匹配导致的BindingException异常。
1. 报错 (mybatis)

nested exception is org.apache.ibatis.binding.BindingException:
Parameter ‘goodsName’ not found. Available parameters are [goodsId, param1, param2, goods]


2. 原因

xxxMapper.xml映射没有得到传入的参数。

2.1 xxxDao中
  • 没有加上@Param注解;
  • 该注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中;
  • 不使用@Param注解时,参数只能有一个,并且是Javabean。所以参数是一个对象时一定要加上该注解。
	/**
	 * 增加商品
	 * @param goods 商品信息
	 */
	void addGoods(@Param("goods")Goods goods);
	

2.2 xxxMapper.xml中

当传入的参数是一个对象时,在mapperxml中写SQL语句时要通过对象获取对象内的具体值。

/*
* Dao层中该方法传入的参数是一个Goods对象
*/
void addGoods(@Param("goods")Goods goods);
<!-- 错误写法 -->
goods_name=#{goodsName,jdbcType=VARCHAR}

<!-- 正确写法 -->
goods_name=#{goods.goodsName,jdbcType=VARCHAR}
SELECT live_goods.live_room_id AS liveRoomId, live_goods.goods_id AS goodsId, goods.order_url AS orderUrl, live_goods.goods_type AS goodsType, goods.goods_name AS goodsName, live_goods.live_price AS livePrice, case when live_goods.goods_type==1 or live_goods.goods_type==2 then ifnull( live_goods.live_stock,- 1 ) ELSE (select SUM(lg.live_stock) from lg where lg.goods_type= live_goods.goods_type and lg.live_room_id=live_goods.live_room_id and lg.goods_id=live_goods.goods_id AND ( CASE WHEN lg.goods_type = 4 THEN lg.sku_id NOT IN ( SELECT sku_id FROM flash_sale WHERE is_delete = 1 ) ELSE 1 = 1 END ) ) end as liveStock, NULL AS pointsAmount FROM live_goods LEFT JOIN goods ON goods.goods_id = live_goods.goods_id WHERE live_goods.explain_status = 0 AND live_goods.is_delete = 0 AND live_goods.goods_status = 1 AND live_goods.live_room_id = 1973909768183500801 AND ( CASE WHEN live_goods.goods_type = 4 THEN live_goods.sku_id NOT IN ( SELECT sku_id FROM flash_sale WHERE is_delete = 1 ) ELSE 1 = 1 END ) GROUP BY live_goods.goods_id, live_goods.live_room_id, live_goods.goods_type, goods.order_url, goods.goods_name ORDER BY ifnull( live_goods.live_price, 0 ), live_goods.points_amount, live_goods.goods_id, live_goods.live_room_id, live_goods.goods_type, goods.order_url, goods.goods_name > 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '==1 or live_goods.goods_type==2 then ifnull( live_goods.live_stock,- 1 ) ELSE' at line 8 > 时间: 0.015s
最新发布
10-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值