为啥有2个,传的是一个集合

有个问题请教一下,为啥会有2个重复的

img


serviceImpl里

img


mapper里

img

那就看你这个查询为什么返回两个一样的呗,是数据库数据重复了还是什么原因

img

因为这两个是类的实例,引用类型的变量,地址不一样,就不是同一个对象
至于里面成员变量是否一样根本不影响,除非重写比较方法

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/756887
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:service中引入mapper报红问题——已解决
  • 除此之外, 这篇博客: Mapper三种形式、工具类以及简单的增删改查中的 更新 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • @Override
    public void update(User user) {
    	SqlSession session = null;
    	try {
    		session = MyBatisUtil.getSession();
    		session.update("User.update", user);
    		session.commit();
    	} catch (Exception e) {
    		e.printStackTrace();
    	} finally {
    		MyBatisUtil.closeSession(session);
    	}
    }
    
  • 您还可以看一下 刘磊老师的项目1——无线自助点餐平台课程中的 第10课:创建Mapper层小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题的原因是在代码中,既在serviceImpl(实现Service接口的类)中,又在mapper(数据访问对象)中有相同的方法。这样做可能是由于以下两种原因导致的:

    1. 在代码段0中提到,当使用通用Mapper插件时,如果存在多个继承类,会导致Spring在加载时无法确定使用哪个类,从而抛出异常。为了解决这个问题,可以使用@Primary注解在其中一个dao***mapper类上进行标注。通过标注@Primary注解,可以让Spring在加载bean时优先选择被标注的类,从而解决异常。

    2. 另一种解决方法是通过使用抽象类和抽象方法的方式来实现。可以创建一个抽象service类(如AbstractService)作为Service接口的实现基类,并在该类中定义一个抽象方法getMapper(),该方法返回实际的mapper。然后,让实现Service接口的子类继承并实现这个抽象方法。这样,在子类中就可以通过实现getMapper()方法来获取实际使用的mapper。这种方式更加优雅和灵活,可以根据需要在各个子类中选择具体的mapper。

    具体的代码示例可以参考代码段2中的AbstractService和MenuServiceImpl。在MenuServiceImpl中,继承了AbstractService,并实现了getMapper()方法,将实际用到的menuMapper返回。这样,在具体的业务逻辑中,就可以通过调用继承的deleteById方法来使用实际的mapper进行删除操作。

    通过以上两种解决方法,可以消除serviceImpl和mapper中的冗余代码,并确保程序正常运行。