@@ -461,44 +461,49 @@ private Page doProcessPage(Invocation invocation, Page page, Object[] args) thro
461461 }
462462 //设置当前的parser,后面每次使用前都会set,ThreadLocal的值不会产生不良影响
463463 ((PageSqlSource )ms .getSqlSource ()).setParser (parser );
464- //忽略RowBounds-否则会进行Mybatis自带的内存分页
465- args [2 ] = RowBounds .DEFAULT ;
466- //如果只进行排序 或 pageSizeZero的判断
467- if (isQueryOnly (page )) {
468- return doQueryOnly (page , invocation );
469- }
464+ try {
465+ //忽略RowBounds-否则会进行Mybatis自带的内存分页
466+ args [2 ] = RowBounds .DEFAULT ;
467+ //如果只进行排序 或 pageSizeZero的判断
468+ if (isQueryOnly (page )) {
469+ return doQueryOnly (page , invocation );
470+ }
470471
471- //简单的通过total的值来判断是否进行count查询
472- if (page .isCount ()) {
473- page .setCountSignal (Boolean .TRUE );
474- //替换MS
475- args [0 ] = msCountMap .get (ms .getId ());
476- //查询总数
477- Object result = invocation .proceed ();
478- //还原ms
479- args [0 ] = ms ;
480- //设置总数
481- page .setTotal ((Integer ) ((List ) result ).get (0 ));
482- if (page .getTotal () == 0 ) {
483- return page ;
472+ //简单的通过total的值来判断是否进行count查询
473+ if (page .isCount ()) {
474+ page .setCountSignal (Boolean .TRUE );
475+ //替换MS
476+ args [0 ] = msCountMap .get (ms .getId ());
477+ //查询总数
478+ Object result = invocation .proceed ();
479+ //还原ms
480+ args [0 ] = ms ;
481+ //设置总数
482+ page .setTotal ((Integer ) ((List ) result ).get (0 ));
483+ if (page .getTotal () == 0 ) {
484+ return page ;
485+ }
486+ } else {
487+ page .setTotal (-1l );
484488 }
485- } else {
486- page .setTotal (- 1l );
487- }
488- //pageSize>0的时候执行分页查询,pageSize<=0的时候不执行相当于可能只返回了一个count
489- if ( page . getPageSize () > 0 &&
490- (( rowBounds == RowBounds . DEFAULT && page .getPageNum () > 0 )
491- || rowBounds != RowBounds . DEFAULT )) {
492- //将参数中的MappedStatement替换为新的qs
493- page .setCountSignal (null );
494- BoundSql boundSql = ms . getBoundSql ( args [ 1 ]);
495- args [ 1 ] = parser . setPageParameter ( ms , args [ 1 ], boundSql , page );
496- page . setCountSignal ( Boolean . FALSE );
497- //执行分页查询
498- Object result = invocation . proceed ();
499- //得到处理结果
500- page . addAll (( List ) result );
489+ //pageSize>0的时候执行分页查询,pageSize<=0的时候不执行相当于可能只返回了一个count
490+ if ( page .getPageSize () > 0 &&
491+ (( rowBounds == RowBounds . DEFAULT && page . getPageNum () > 0 )
492+ || rowBounds != RowBounds . DEFAULT )) {
493+ //将参数中的MappedStatement替换为新的qs
494+ page .setCountSignal ( null );
495+ BoundSql boundSql = ms . getBoundSql ( args [ 1 ]);
496+ args [ 1 ] = parser . setPageParameter ( ms , args [ 1 ], boundSql , page );
497+ page .setCountSignal (Boolean . FALSE );
498+ //执行分页查询
499+ Object result = invocation . proceed ( );
500+ //得到处理结果
501+ page . addAll (( List ) result );
502+ }
503+ } finally {
504+ (( PageSqlSource ) ms . getSqlSource ()). removeParser ( );
501505 }
506+
502507 //返回结果
503508 return page ;
504509 }
0 commit comments