确认

  • [X] 我使用的版本是最新版, 并且使用插件确认过项目里无依赖版本冲突
  • [X] 我已经在 issue 中搜索过, 确认问题没有被提出过
  • [X] 我已经修改标题, 将标题中的 描述 替换为遇到的问题

当前程序版本

3.5.9

问题描述

无法在xml中重写 selectPage()方法 BaseMapper 中 selectPage()方法默认调用this.selectList(page, queryWrapper)方法,我在xml中重写selectList方法是可行的,打印的sql为xml中的方法,但是我不想重写selectList,想重写selectPage(),每次执行都要调默认方法,mapper中重写selectPage()也不会覆盖,我有什么方法能否重写selectPage()吗?

详细堆栈日志

No response

Comment From: miemieYaho

没其他办法

Comment From: nieqiurong

在mapper上重写default方法为接口方法.

@Override
@Select("select * from h2user")
<P extends IPage<H2User>> P selectPage(P page, Wrapper<H2User> queryWrapper);

Comment From: YanziQii

在mapper上重写default方法为接口方法.

java @Override @Select("select * from h2user") <P extends IPage<H2User>> P selectPage(P page, Wrapper<H2User> queryWrapper); @ Override 在interface上无法使用啊,会直接报错;mapper上重写这个接口还是走的原来方法,不生效。

Comment From: YanziQii

我是这么解决的: 在mapper中重写 default selectPage方法 @Override default <P extends IPage<H2User>> P selectPage(P page, Wrapper<H2User> ew) { return listPage(page, ew); } 然后定义一个 listPage() 接口 <P extends IPage<H2User>> P listPage(P page, @Param("ew") Wrapper<H2User> wrapper); 注意参数名要保持一致,不然会提示找不到参数‘ew’ 在xml中写listPage相关的sql就可以了,感觉不太优雅,但是也找不到其他更好的方法了

Comment From: nieqiurong

用高版本jdk就可以,老的只能自行去重写实际调用方法.

Comment From: YanziQii

用高版本jdk就可以,老的只能自行去重写实际调用方法.

还在用jdk1.8....

Comment From: nieqiurong

刚测试了下,1.8也没问题 MyBatis-Plus [错误报告]: 描述 无法在xml中重写 selectPage()方法

Comment From: YanziQii

我试了下确实可以,那@ Override报错应该是我写的重载方法返回参数有问题 必须得用这个接收

> P selectPage(P page, Wrapper ew), 我一开始定义的返回结果为 IPage<H2User> selectPage(Page page,Wrapper<H2User> ew)或者 Page<H2User> selectPage(Page page,Wrapper<H2User> ew) 都认为有问题,直接报错,我还以为不支持@ Override呢。 应该让idea帮我Override的,学到了