MybatisPlus mybatisplusbasemapperrequiredasinglebeanbutxwerefound
异常信息
Field baseMapper in com.baomidou.mybatisplus.extension.service.impl.ServiceImpl required a single bean, but 42 were found:
// 省略其它信息干扰
错误原因
public class xxxServiceImpl extends BaseService {
// code
}
public abstract class BaseService<M extends BaseMapper<T>, T> extends ServiceImpl<M, T> implements IService<T> {
// code
}
-
BaseService 相当于一个工具类, 参考 mybatis-plus 创建的。
-
没有指定 M 以及 T, 也即 mapper 和实体对象。
-
新建的 xxxServiceImpl 类,只想使用 BaseService 里面的工具。
-
问题就这样产生了。
解决办法
-
随便选择一个 mapper 以及对应的实体 BaseService <M, T>
-
重新设计类,改用组合而不是集成。
反思
-
mybatis-plus 大多数人都是偷懒,想直接使用plus提供的方法完成crud,的确很快,很高效。
-
但是这个继承,一点都不优秀,整个框架都依赖上了。无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑?。service/mapper对象都依赖。还不是影响工程?
-
提供的crud,也只针对单表,和jpa有什么区别,jpa人家更符合设计规范吧。
-
不伦不类。
-
少用mybatis-plus.
-
国外设计的框架,的确严格、准守通用的规范,国内的确挺飘的。尽量少使用国产的,很多都是快餐式工具。