今天继承Mybatis-Plus里面的BaseMapper做的Dao层接口,实现selectPage()方法,但是一直报异常,代码和报错信息如下:
@Service
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryDao categoryDao;
@Override
public IPage findPage(PageAndQuery p) {
IPage page= new Page<>(p.getPage(),p.getPageSize());
//正常来说,这里应该返回一个IPage类型的对象,但是返回的却是一个类型E e
//鼠标悬停,报错信息如下:Inferred type 'E' for type parameter 'E' is not within its bound; should implement 'com.baomidou.mybatisplus.core.metadata.IPage'
E e = categoryDao.selectPage(page, null);
//这里忽略,因为上面已经有问题了,所以不往下返回值了
return null;
}
}
我很奇怪,是不是这个方法不能传null的参数呢?于是我去查看了源码:
> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
源码说这个方法可以为空,那就不是参数的问题。
于是我运行了一下程序,想要得到更详细的提示,报错结果如下:
Error:(23, 26) java: 无法将接口 com.baomidou.mybatisplus.core.mapper.BaseMapper中的方法 selectPage应用到给定类型; 需要: E,com.baomidou.mybatisplus.core.conditions.Wrapper 找到: com.baomidou.mybatisplus.core.metadata.IPage , 原因: 推断类型不符合上限 推断: com.baomidou.mybatisplus.core.metadata.IPage 上限: com.baomidou.mybatisplus.core.metadata.IPage
报错第2-3行显示:需要CategoryDao,找到Category,所以类型不匹配
我就很奇怪,这里要的不是实体类Category吗?怎么会去找CategoryDao接口呢?于是我去接口文件看了一下,代码如下:
import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface CategoryDao extends BaseMapper{ }
额,原来是犯了一个低级错误,把BaseMapper里面的类型写成CategoryDao接口了,这个类型应该写实体类Category的。
修改代码如下:
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.itheima.bean.Category; public interface CategoryDao extends BaseMapper{ } --------------------------------------------------------------------------------------- @Service public class CategoryServiceImpl implements CategoryService { @Autowired private CategoryDao categoryDao; @Override public IPage findPage(PageAndQuery p) { IPage page= new Page<>(p.getPage(),p.getPageSize()); IPage iPage = categoryDao.selectPage(page, null); return null; } }
编译成功!
最后再改一下返回值就好了就好了
总结:
- Mybatis可以使用一个简单的XML配置文件或者Annotation来配置和匹配实体。
- 在Mybatis-Plus中,也可以通过继承BaseMapper< T >,并在泛型T中指定实体的类型匹配接口和实体。
- 遇到错误要仔细看报错,如果报错不明显,可以运行一下看详细错误,找到反常的地方。
- 类型不符合的情况,可以检查一下泛型是否指定错误了。



