当前使用版本(必填,否则不予处理)
3.3.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
由于执行分页查询时参数不是一个固定的实体,也不是固定的SQL,所以自己写了一个
DynamicSelectPage extends AbstractMethod
来实现。
参照PaginationInterceptor 写了一个
@Accessors(chain = true)
@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
public class DynamicPaginationHandler extends AbstractSqlParserHandler implements Interceptor
在这个类中给动态给参数赋值,
Mapper中定义了
<E extends IPage<?>> E dynamicSelectPage(IDynamicPage page, BaseMetadata baseMetadata) ;
请注意:这里的参数为我自己写的page对象,返回的是MP的Page对象(为什么是MP的Page对象是因为MybatisMapperMethod中固定判断了)
查询出结果后在自己写的
public class DynamicResultHandler implements Interceptor
中转成PageList
但是返回到MybatisMapperMethod中时,
MP直接用的参数的IPage对象判断,因为page参数对象为空,导致为空指针异常!
我觉得是不是可以做个判断,如果为空应该重新创建一个page对象?
或者还有其他解决方案?
Comment From: miemieYaho
不会重新创建,ipage只是一个接口
Comment From: 156640677
传入的Page对象不一定是返回的Page对象,是不是可以考虑重新创建一下?像我这种场景有没有什么好的建议?
不会重新创建,ipage只是一个接口
Comment From: 156640677
或者这里
可以自己给SQL中的参数赋值。
如果接目前的逻辑是参数中有IPage就走了MP里的分页插件方法,我没法给动态SQL赋值。
Comment From: miemieYaho
你就自己写个分页插件吧,method定义的返回值可以是list, MybatisMapperMethod只是在返回值是ipage时进行ipage.setRecords操作