分頁攔截器怎么把記錄總條數(shù)傳出?
public?Object?intercept(Invocation?invocation)?throws?Throwable?{ StatementHandler?statementHandler?=?(StatementHandler)invocation.getTarget(); MetaObject?metaObject?=?MetaObject.forObject(statementHandler,?SystemMetaObject.DEFAULT_OBJECT_FACTORY,?SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY); MappedStatement?mappedStatement?=?(MappedStatement)metaObject.getValue("delegate.mappedStatement"); //?配置文件中SQL語句的ID String?id?=?mappedStatement.getId(); if(id.matches(".+ByPage$"))?{ BoundSql?boundSql?=?statementHandler.getBoundSql(); //?原始的SQL語句 String?sql?=?boundSql.getSql(); //?查詢總條數(shù)的SQL語句 String?countSql?=?"select?count(*)?from?("?+?sql?+?")a"; Connection?connection?=?(Connection)invocation.getArgs()[0]; PreparedStatement?countStatement?=?connection.prepareStatement(countSql); ParameterHandler?parameterHandler?=?(ParameterHandler)metaObject.getValue("delegate.parameterHandler"); parameterHandler.setParameters(countStatement); ResultSet?rs?=?countStatement.executeQuery(); Map<?,?>?parameter?=?(Map<?,?>)boundSql.getParameterObject(); Page?page?=?(Page)parameter.get("page"); if(rs.next())?{ page.setTotalNumber(rs.getInt(1)); } //?改造后帶分頁查詢的SQL語句 String?pageSql?=?sql?+?"?limit?"?+?page.getDbIndex()?+?","?+?page.getDbNumber(); metaObject.setValue("delegate.boundSql.sql",?pageSql); } return?invocation.proceed(); }
攔截器中 中途查詢了記錄總條數(shù),若要把該總條數(shù)傳給外部控制如Service層要怎么做?
想把rs.getInt(1)的值傳給攔截器外部類使用
2017-02-13
我上面給出的代碼中
這個page對象作用范圍只是在?intercept(){}方法內(nèi),而intercept方法只是 攔截器類的一個方法(該攔截器類繼承了Interceptor)并不是action 所在的類,我是想把mybatis的Mapper接口中dao操作方法返回查詢結(jié)果集記錄條數(shù)和查詢結(jié)果集。
核心問題就是:實現(xiàn)Interceptor接口時,自定義步驟中產(chǎn)生的變量如何傳出到action方法內(nèi)(該變量不是查詢結(jié)果集)
2017-02-13
這條語句只是獲取了一個page對象的一個引用,在servlet調(diào)用service,service調(diào)用dao,PageInterceptor
攔截器攔截器攔截page,page不斷的在改變,當調(diào)用完成,值就已經(jīng)在最開始那個page對象里面了。
2017-01-12
setTotalNumber已經(jīng)在page了,通過servlet的request方法獲取,再傳遞給service