Mybatis报错: Parameter ‘XXX‘ not found. Available parameters are [arg1, arg0, param1, param2]解决方案及问题原因

 哈喽~大家好,这专栏是记录经常出现的报错一些问题,这篇来看看 Mybatis报错: Parameter ‘XXX‘ not found. Available parameters are [arg1, arg0, param1, param2]解决方案及问题原因。

 🥇个人主页:个人主页​​​​​             

🥈 系列专栏:【报错日常】    

    

目录

一、首先看代码

二、解决方法


一、首先看代码

mapper代码

    public List<Emp> selectLike(String name,Short gender, LocalDate begin, LocalDate end);

test 代码

    @Test
    void testLike() {
        
        List<Emp> empList = empMapper.selectLike("张", null, null, null);
        System.out.println(empList);
    }

报错截图

二、解决方法

先说解决方法,使用注解指定参数名称,加上注解 @Param,代码如下

    public List<Emp> selectLike(@Param("name") String name,@Param("gender")  Short gender,
                                @Param("begin") LocalDate begin, @Param("end") LocalDate end);

运行没问题

为什么出现这原因?

一般造成此问题的原因通常是Dao / Mapper 层的方法含有多个参数。

运行之前出错的代码,点击 target 目录下的编译之后的mapper文件,我们发现编译之后的代码参数名字对应不上。

也就是说,mybatis默认使用参数下标作为参数名称对参数赋值,即0、1、2等等这些参数名称,只有当使用注解显示标注参数名称才会使用指定的参数名称。

那怎么办?以后都要加上 @Param 注解吗?

springBoot1.x版本或者单独使用mybatis,就要加上 @Param,lspringBoot的2.x版本,他会自动编译识别好,不用担心。

在springBoot的2.x版本(保证参数名一致)

springBoot的父工程对compiler编译插件进行了默认的参数parameters配置,使得在编译时,会在生成的字节码文件中保留原方法形参的名称,所以#{…}里面可以直接通过形参名获取对应的值。

在springBoot的1.x版本/单独使用mybatis(使用@Param注解来指定SQL语句中的参数名)

在编译时,生成的字节码文件当中,不会保留Mapper接口中方法的形参名称,而是使用var1、var2、...这样的形参名字,此时要获取参数值时,就要通过@Param注解来指定SQL语句中的参数名。

不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿追

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值