有个问题请教一下,为啥会有2个重复的
那就看你这个查询为什么返回两个一样的呗,是数据库数据重复了还是什么原因
因为这两个是类的实例,引用类型的变量,地址不一样,就不是同一个对象
至于里面成员变量是否一样根本不影响,除非重写比较方法
@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);
}
}
问题的原因是在代码中,既在serviceImpl(实现Service接口的类)中,又在mapper(数据访问对象)中有相同的方法。这样做可能是由于以下两种原因导致的:
在代码段0中提到,当使用通用Mapper插件时,如果存在多个继承类,会导致Spring在加载时无法确定使用哪个类,从而抛出异常。为了解决这个问题,可以使用@Primary注解在其中一个dao***mapper类上进行标注。通过标注@Primary注解,可以让Spring在加载bean时优先选择被标注的类,从而解决异常。
另一种解决方法是通过使用抽象类和抽象方法的方式来实现。可以创建一个抽象service类(如AbstractService)作为Service接口的实现基类,并在该类中定义一个抽象方法getMapper(),该方法返回实际的mapper。然后,让实现Service接口的子类继承并实现这个抽象方法。这样,在子类中就可以通过实现getMapper()方法来获取实际使用的mapper。这种方式更加优雅和灵活,可以根据需要在各个子类中选择具体的mapper。
具体的代码示例可以参考代码段2中的AbstractService和MenuServiceImpl。在MenuServiceImpl中,继承了AbstractService,并实现了getMapper()方法,将实际用到的menuMapper返回。这样,在具体的业务逻辑中,就可以通过调用继承的deleteById方法来使用实际的mapper进行删除操作。
通过以上两种解决方法,可以消除serviceImpl和mapper中的冗余代码,并确保程序正常运行。