Mapper类中存在名称相同的方法重载报错问题
作者:HCW_wei 发布时间:2023-04-04 02:44:39
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接口中使用方法重载。
方法重载和方法重写的区别
方法的重载的规则
方法名必须相同
参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
方法的返回类型可以相同也可以不相同
仅仅返回类型不同不足以成为方法的重载
重载就是在一个类中,有相同的函数名称,但形参不同的函数
方法名相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错
方法的重写
方法名必须相同
参数列表必须相同
修饰符:范围可以扩大但不能缩小 :public>protect>default>private
重写:子类的方法和父类必须一致,方法体可以不同。需要有继承关系,子类重写父类方法
来源:https://blog.csdn.net/HCW_wei/article/details/121822639


猜你喜欢
- 我们知道,编写一个Java程序后,如果想让自己编写的代码可以正常运行,我们便需要对它进行编译和运行,而Java环境变量的配置就显得尤为重要,
- 不知道你们在使用Retrofit访问后台接口时返回的数据是否是一样的格式,比如登录接口,在我们输入密码成功或错误的时候后台返回的数据格式是不
- 小米系统自带的长截屏应该很多人都用过,效果不错。当长截屏时listview就会自动滚动,当按下停止截屏时,就会得到一张完整的截屏。该篇就介绍
- 一、JNDI是什么?JNDI--Java 命名和目录接口(Java Naming and Directory Interface),是一组在
- SpringMVC @NotNull校验不生效是不是少包了。@NotEmpty也找不到。加了两个依赖问题解决 &l
- 运算符重载一直是一个很诡异事情,因为在写代码的时候,不知道某个运算符有没有被重载过。在 C++ 里面,运算符重载可以写在类的外面,当 int
- 需求背景闲话不扯,直奔主题。需要和web前端建立长链接,互相实时通讯,因此想到了websocket,后面随着需求的变更,需要用户订阅主题,实
- Android 将view 转换为Bitmap出现空指针问题解决办法在做Android 项目的时候,有时候可能有这样的需求,将一个View
- 使用@Autowired注解有错误提示使用Spring boot +mybatis框架时,在service实现类中使用Mapper类,给Ma
- 以下内容来自 * ,关于静态类型检查和动态类型检查的解释:•静态类型检查:基于程序的源代码来验证类型安全的过程;•动态类型检查:在程序运行
- 前言本章是关于Java数组的最全汇总,本篇为汇总上篇,主要讲了一维数组的相关内容。数组是最常见的一种数据结构,它是相同类型的用一个标识符封装
- android在网络上下载文件,供大家参考,具体内容如下步骤: 1.使用HTTP协议下载文件- 创建一个HttpURLConnection对
- jmap命令可以打印java进程的JVM堆信息,今天在某台机器上运行该命令查看 19560进程的堆信息jmap -heap 19560出现以
- 1 引言伴随着信息技术的快速发展,近年来,人们的生活已经离不开计算机。生活娱乐几乎都是在计算机上进行的。其中的扫雷游戏就是之一。扫雷游戏是微
- 首先 下载 jedis.jar包然后再 工程设置里面找到Libraries,点击+。添加下载好的jedis.jar包。点击OK退出即可创建J
- 前言上篇博客我们介绍了如何创建一个spring项目,并且如何的存、取对象,介绍了相关方法,那么本篇博客将接着上篇博客的内容介绍如何更加简单的
- 一、声明式这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律
- 本文实例为大家分享了Android实现页面短信验证功能的具体代码,供大家参考,具体内容如下目标效果:上一篇博文介绍的是使用SDK中自带的验证
- 1、什么是 生命周期?Maven 强大的原因是有一个十分完善的生命周期,生命周期可以理解为项目构建步骤的集合,它定义了各个构建环节的执行顺序
- 我们通过学习Java基础知识,让自己正式踏入学习Java语言的行列,这篇博客是用来让我们真正的了解并应用面向对象的思想来实现的。使用简单的J