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方法的接口,会报一个&ldquo;Parameter &lsquo;oldSort&rsquo; not found 就是参数不存在的错误&rdquo;

原因分析

找到了原因:在使用@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

标签:Mapper类,名称相同,方法重载
0
投稿

猜你喜欢

  • 关于重写equals()方法和hashCode()方法及其简单的应用

    2023-08-01 06:48:13
  • Java之策略模式比较器案例讲解

    2021-12-25 22:24:32
  • Java实现的断点续传功能的示例代码

    2023-05-25 12:17:22
  • MVVM和MVVMLight框架介绍及在项目中的使用详解

    2021-07-29 06:59:10
  • Java零基础精通方法篇

    2021-08-29 12:07:58
  • Redis6搭建集群并在SpringBoot中使用RedisTemplate的实现

    2023-10-31 14:48:05
  • 使用java代码获取新浪微博应用的access token代码实例

    2023-12-01 20:18:30
  • 详解Springboot之Logback的使用学习

    2023-08-11 23:51:12
  • Java中使用HashMap时指定初始化容量性能解析

    2023-01-01 11:05:27
  • Java 运算符详情

    2022-02-12 05:54:43
  • Mybatis Plus代码生成器(时间管理大师)

    2023-01-30 16:27:35
  • C#正则过滤HTML标签并保留指定标签的方法

    2022-12-23 18:21:39
  • spring boot 下对JSON返回值去除null和空字段操作

    2022-11-06 20:06:52
  • Unity2019-2020 个人版官方免费激活详细方法

    2023-12-08 21:57:39
  • Android studio实现简易计算器App功能

    2023-03-07 07:57:57
  • C#实现的sqlserver操作类实例

    2023-04-24 12:13:06
  • Spark Streaming算子开发实例

    2023-03-17 02:28:41
  • 同步调用和异步调用WebService

    2022-11-27 07:10:03
  • 实现Android studio设置自动导包及自动导包快捷键

    2022-03-22 00:05:26
  • Java打印九九乘法表代码详情

    2022-03-14 17:42:14
  • asp之家 软件编程 m.aspxhome.com