栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Mybatis-Plus】【异常】Inferred type ‘E‘ for type parameter ‘E‘ is not within its bound;

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Mybatis-Plus】【异常】Inferred type ‘E‘ for type parameter ‘E‘ is not within its bound;

问题描述

今天继承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;
    }
}

编译成功!
最后再改一下返回值就好了就好了


总结:
  1. Mybatis可以使用一个简单的XML配置文件或者Annotation来配置和匹配实体。
  2. 在Mybatis-Plus中,也可以通过继承BaseMapper< T >,并在泛型T中指定实体的类型匹配接口和实体。
  3. 遇到错误要仔细看报错,如果报错不明显,可以运行一下看详细错误,找到反常的地方。
  4. 类型不符合的情况,可以检查一下泛型是否指定错误了。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号