java - 如何使用扩展父映射器的子映射器方法

标签 java spring-boot mapper

我正在尝试通过灵活的大小写调用子映射器方法 但是在这种情况下,我们不知道会调用哪个方法,即使它扩展了父映射器。 [spring boot框架与mybatis]

// ParentMapper
public interface ParentMapper
{
    // List<Map<String, String> findAll();
}

// Child1Mapper
public interface Child1Mapper extends ParentMapper
{
    List<Map<String, String> findAll();
}

// Child2Mapper
public interface Child2Mapper extends ParentMapper{
    List<Map<String, String> findAll();
}



@Autowired
Child1Mapper child1Mapper;

@Autowired
Child2Mapper child2Mapper;

// some class file
public ParentMapper getMapper(String param){
    switch(param){
        case "case1" : child1Mapper;
        case "case2" : child2Mapper;
        ... 10 more..
    }
}



public class example{
    public void somethid(){
        // this logic is in some biz
        ParentMapper mapper = getMapper("case1");  // <----`-` we do not know where `findAll method` located is in
        mapper.findAll();
    }
}

如何调用子映射器方法

最佳答案

如果您将 case1 传递给 getMapper(String param) 方法,它在代码中很清楚,它将返回 return new Child1Mapper() child1mapper 对象,所以如果你调用 findAll() 方法然后 child1mapperfindAll() 方法将被调用

如果你传递 case2 那么你将得到 child2mapper 对象 (就像 Parentmapper p = new Child2Mapper()) 所以如果你调用 findAll() 方法 (p.findAll()) child2mapper findAll() 方法将被调用

child1mapperchild2mapper 都是parentmapper 的子类,但是child1mapperchild2mapper 所以不存在方法冲突的概念

关于java - 如何使用扩展父映射器的子映射器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51887519/

相关文章:

java - 使用 BasicDataSource 关闭非 Activity session

java - 如何从firebase :获取数据

spring-boot - SpringBoot 并使用/加载一个动态的 "applicationContext.xml"而不是硬编码的

hadoop - 将为 Hive 中的分区表创建多少个映射器和缩减器

java - Hadoop 为每个映射器使用一个实例

hadoop - 在hadoop中执行作业时,应为映射器和化简器设置什么值,以及如何确定它?

java - 使用多种不同字体渲染 JTree 中的节点

java - file.exists() 和 file.createNewFile() 不能正常工作?

java - 方法参数aspectj在Spring Boot中不起作用

json - Spring Boot Actuator 端点的 pretty-print JSON 输出