返回顶部
首页 > 资讯 > 精选 >Mapper类中存在名称相同的方法重载报错怎么解决
  • 397
分享到

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

2023-07-05 20:07:12 397人浏览 泡泡鱼
摘要

今天小编给大家分享一下Mapper类中存在名称相同的方法重载报错怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Map

今天小编给大家分享一下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 &lsquo;oldSort&rsquo; not found 就是参数不存在的错误”

    原因分析

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

    假如项目启动时候通过反射获取mapper方法数组顺序先是在第一个

    此时调用方法,正常,不会有问题;

    因为mybatis查找mapper内的方法是靠方法名,和参数无关。方法名就是mapper.xml里面的id一样

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

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

    方法重载和方法重写的区别

    方法的重载的规则

    • 方法名必须相同

    • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)

    • 方法的返回类型可以相同也可以不相同

    • 仅仅返回类型不同不足以成为方法的重载

    重载就是在一个类中,有相同的函数名称,但形参不同的函数

    方法名相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错

    方法的重写

    • 方法名必须相同

    • 参数列表必须相同

    • 修饰符:范围可以扩大但不能缩小 :public>protect>default>private

    重写:子类的方法和父类必须一致,方法体可以不同。需要有继承关系,子类重写父类方法

    以上就是“Mapper类中存在名称相同的方法重载报错怎么解决”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: Mapper类中存在名称相同的方法重载报错怎么解决

    本文链接: https://lsjlt.com/news/354918.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作