IDEA写Mybatis:参数匹配无法根据方法参数顺序默认匹配

今天在搞mybatis,完成Mappper方法:

    @Select("select * from emp where name like '%${name}%'and gender = #{gender} and entrydate between #{begin} and #{end} order by update_time desc")  
    public List<Emp> getList(String name,  short gender, LocalDate begin,  LocalDate end);

测试报错:发现idea没按照默认顺序进行参数匹配。

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Available parameters are [arg3, arg2, arg1, arg0, param3, param4, param1, param2]

查看编译后Mapper方法:编译并未保留方法的形参名称,故无法实现匹配。

    @Select({"select * from emp where name like '%${name}%'and gender = #{gender} and entrydate between #{begin} and #{end} order by update_time desc"})
    List<Emp> getList(String val1, short val2, LocalDate val3, LocalDate val4);

查看自己的spring版本:

    <properties>
        <java.version>11</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.7.6</spring-boot.version>
    </properties>

2.x以上,版本没毛病,那估计是idea的问题。

遂参考大佬文章:

jdk1.8 开启-parameters参数,编译保留参数名,为反射提供便利-CSDN博客

在Additional command line parameters选项中添加

-parameters

然后Rebuild Project(注意不能只Rerun方法!!!!)

成功!

ps:破抽象问题搞了好久,结果一直没找南感觉自己小命不保,溜了

12.26更新,今天又碰到这种问题了,试了上述办法都不好使,甚至加了@Param,也不管用。
最终解决:查看编译的文件,为了运行就设置sql的变量为args0,args1...,然后rebuild,测试成功。

然后再改回来。。。。。

再rebuild,没毛病了就。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

llyllylly123

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

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

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

打赏作者

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

抵扣说明:

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

余额充值