Mybatis中的@Param注解(org.apache.ibatis.binding.BindingException: Parameter 'xxx' not found异常处理)

当方法只有一个参数时,不需要加上@Param。如果这个参数是POJO且在SQL语句中需要使用其属性,使用#{属性名}既可以引用。
当有多个参数时,如果不加上@Param,会抛出如下异常:

@Insert("insert into tb_category_brand(category_id,brand_id) values(#{categoryID},#{brandId});")
int saveCategoryIdAndBrandId(Long categoryID,Long brandId);

异常:

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

异常的原因是在SQL语句中引用函数参数不能使用#{参数名}的形式,mybatis会根据参数位置将参数取名为[arg1, arg0, param1, param2],在SQL中#{arg1}是不会报错的,所以将上述代码改为可以正确运行:

@Insert("insert into tb_category_brand(category_id,brand_id) values(#{arg1},#{arg0});")
int saveCategoryIdAndBrandId(Long categoryID,Long brandId);

但是这样可读性很差,于是我们可以使用@Param注解,其中只有一个value属性。给参数加上@Param注解后,mybatis会自动将参数封装成map类型,@Param注解的值@Param(“value”)作为map的key,对应参数作为value,在SQL中就可以使用注解的值来使用参数:

@Insert("insert into tb_category_brand(category_id,brand_id) values(#{cid},#{bid});")
int saveCategoryIdAndBrandId(@Param("cid") Long categoryID, @Param("bid") Long brandId);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值