Python 官方文档:入门教程 => 点击学习
目录Mapper类中存在名称相同的方法重载报错项目场景问题描述原因分析方法重载和方法重写的区别方法的重载的规则方法的重写总结Mapper类中存在名称相同的方法重载报错 项目场景 官网
官网项目开发
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接口中使用方法重载。
重载就是在一个类中,有相同的函数名称,但形参不同的函数
方法名相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错
重写:子类的方法和父类必须一致,方法体可以不同。需要有继承关系,子类重写父类方法
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: Mapper类中存在名称相同的方法重载报错问题
本文链接: https://lsjlt.com/news/202786.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0