确认
当前程序版本
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也没问题
Comment From: YanziQii
我试了下确实可以,那@ Override报错应该是我写的重载方法返回参数有问题 必须得用这个接收
> P selectPage(P page, WrapperIPage<H2User> selectPage(Page page,Wrapper<H2User> ew)或者 Page<H2User> selectPage(Page page,Wrapper<H2User> ew) 都认为有问题,直接报错,我还以为不支持@ Override呢。
应该让idea帮我Override的,学到了