当前使用版本(必填,否则不予处理)

1.18.20

该问题是如何引起的?(确定最新版也有问题再提!!!)

IService只有泛型T,表示实体类型,而ServiceImpl则有泛型M,T,M表示具体Mapper,T表示具体实体类型 ServiceImpl的设计明显远好于IService,不知道为什么IService不这样设计。现在这个错误的设计引发了一个巨坑。 IService.getBaseMapper()只能获取到BaseMapper,而不是M,这导致M新增的映射都无法调用。然而ServiceImpl里明明有具体的类型。这个巨大的坑还延伸到任何需要获取BaseMapper的地方,必然Query。

重现步骤(如果有就写完整)

注入IService,getBaseMapper只能得到BaseMapper,而非具体的M

报错信息

解决办法

添加泛型M,getBaseMapper返回类型改成M

Comment From: summer2516

需要获取的不是BaseMapper 我需要是的UserMapper我自己定义的Mapper

Comment From: vipcxj

需要获取的不是BaseMapper 我需要是的UserMapper我自己定义的Mapper

就是这个意思,BaseMapper不管里面泛型是啥,都改变不了这东西肯定不包含我自定义方法的困境~

Comment From: AneonCode

这个设计者当时应该是为了把各层能够充分的隔离开 比如在AServiceImpl中想要使用B模块的内容,只应该使用B模块的IService中的方法,如果更下一层的BMapper中的方法想要在A中使用,应该在IBService中去封装一层,然后在A中直接调用的是IBService中的方法而不是想办法去获取BMapper直接调用BMapper中的方法。

Comment From: huayanYu

设计思路不一样,可以参考设计自己的service。