Mapper类中存在名称相同的方法重载报错

本文介绍了在MyBatis中遇到的方法重载导致的报错问题。当在Mapper接口中使用相同的@Update注解定义不同参数的方法时,由于Mapper接口方法名作为XML映射ID,会导致映射冲突。解决方案是避免在Mapper接口中使用方法重载,确保每个方法有唯一的命名。此外,还讨论了在需要进行多表查询时如何正确地使用Mapper XML文件。
摘要由CSDN通过智能技术生成

项目场景:

官网项目开发

问题描述:

Mapper类中存在名称相同的方法重载报错

为了省事,直接在mapper层通过@select@update等注解形式写sql (此时大都是单表查询没有创建mapper.xml文件)代码如下:

	@Update("")
    void updateSortBySort(Integer newSort, Integer platform, Integer classification);
    @Update("")
    void updateSortBySort(Integer oldSort, Integer newSort, Integer platform, Integer classification);

此时可以正常使用
接下来因为业务原因,需要进行多表查询,仅使用mybatis自带的不行,需要使用mapper.xml文件写sql脚本,进行多表查询

	@Update("")
    void updateSortBySort(Integer newSort, Integer platform, Integer classification);
    @Update("")
    void updateSortBySort(Integer oldSort, Integer newSort, Integer platform, Integer classification);
    IPage<List<ProductVo>> getlistPage(IPage<ProductVo> page,
                                              @Param("Param1")Integer Param1,
                                              @Param("Param2")Integer Param2);

此时调用第一个updateSortBySort方法的接口,会报一个“Parameter ‘oldSort’ not found 就是参数不存在的错误”


原因分析:

找到了原因:在使用@Select等注解的情况下,方法名即为mapper的id,id相同。重载的方法会报这个错

假如项目启动时候通过反射获取mapper方法数组顺序先是在第一个
此时调用方法,正常,不会有问题;
因为mybatis查找mapper内的方法是靠方法名,和参数无关。方法名就是mapper.xml里面的id一样

当不进行方法的重载时,即:每个方法都有唯一的命名时,在xml中进行映射后,就可以执行,不会出现异常。

所以mybatis中mapper.xml是不会准确映射到Java中的重载方法的。最好不要在mapper接口中使用方法重载。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值