今天面试的时候面试官问了 mybatis的映射接口是否支持重载,我心想着mybatis这种比较成熟的框架应该是可以的,结果是mybatis是并不支持的,所以我百度了下,发现mybatis mapper中不能重载,因为它是通过 package1.package2.ClassName.methodname来定位方法的。然后我再网上找到了这个的解决方式,
方法一:
使用mybatis的动态sql if 就行了,没必要去重载

方法二:
使用jdk1.8以后的default解决

public interface AccountMapper {
    default List<Account> getAccounts(@Param("status") String status) {
        return this.getAccounts(status, -1);
    }
    List<Account> getAccounts(@Param("status") String status, @Param("owner") int owner);
}

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

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

最后修改:2021 年 10 月 30 日 11 : 15 PM