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
}
  1. BaseService 相当于一个工具类, 参考 mybatis-plus 创建的。

  2. 没有指定 M 以及 T, 也即 mapper 和实体对象。

  3. 新建的 xxxServiceImpl 类,只想使用 BaseService 里面的工具。

  4. 问题就这样产生了。

解决办法

  1. 随便选择一个 mapper 以及对应的实体 BaseService <M, T>

  2. 重新设计类,改用组合而不是集成。

反思

  1. mybatis-plus 大多数人都是偷懒,想直接使用plus提供的方法完成crud,的确很快,很高效。

  2. 但是这个继承,一点都不优秀,整个框架都依赖上了。无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑?。service/mapper对象都依赖。还不是影响工程?

  3. 提供的crud,也只针对单表,和jpa有什么区别,jpa人家更符合设计规范吧。

  4. 不伦不类。

  5. 少用mybatis-plus.

  6. 国外设计的框架,的确严格、准守通用的规范,国内的确挺飘的。尽量少使用国产的,很多都是快餐式工具。