第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

分頁攔截器怎么把記錄總條數(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)的值傳給攔截器外部類使用

正在回答

3 回答

我上面給出的代碼中

??Page?page?=?(Page)parameter.get("page");//?22行

這個page對象作用范圍只是在?intercept(){}方法內(nèi),而intercept方法只是 攔截器類的一個方法(該攔截器類繼承了Interceptor)并不是action 所在的類,我是想把mybatis的Mapper接口中dao操作方法返回查詢結(jié)果集記錄條數(shù)和查詢結(jié)果集。

核心問題就是:實現(xiàn)Interceptor接口時,自定義步驟中產(chǎn)生的變量如何傳出到action方法內(nèi)(該變量不是查詢結(jié)果集)

HashMap<Integer,Message>?map?=new?HashMap<Integer,Message>();
map=?(HashMap<Integer,?Message>)?messageMapper.queryMessageRange(5,5,"asd");
//?我的理解?這里的map就是返回的查詢結(jié)果集。messageMapper是一個DAO實現(xiàn)類,內(nèi)部有封裝的查詢方法,例如queryMessageRange()


0 回復 有任何疑惑可以回復我~
#1

SolidCocoi 提問者

我有這個疑問是想解決多步查詢,假設(shè)執(zhí)行DAO中的Query方法會調(diào)用sql1語句,攔截器對這個Query方法攔截,在sql1語句執(zhí)行前判斷一下,假設(shè)這個判斷條件就是sql2語句的結(jié)果,攔截器要怎么寫才能根據(jù)sql2語句的結(jié)果選擇是否執(zhí)行sql1
2017-02-13 回復 有任何疑惑可以回復我~
Page?page?=?(Page)parameter.get("page");

這條語句只是獲取了一個page對象的一個引用,在servlet調(diào)用service,service調(diào)用dao,PageInterceptor
攔截器攔截器攔截page,page不斷的在改變,當調(diào)用完成,值就已經(jīng)在最開始那個page對象里面了。

0 回復 有任何疑惑可以回復我~
#1

SolidCocoi 提問者

可以給點實例嗎?就是如何在被 @RequestMapping(value = "/myfunction")標記的方法內(nèi)拿到這個page對象包含的記錄條數(shù)值
2017-02-13 回復 有任何疑惑可以回復我~

setTotalNumber已經(jīng)在page了,通過servlet的request方法獲取,再傳遞給service

0 回復 有任何疑惑可以回復我~
#1

SolidCocoi 提問者

放假幾乎沒上線過回復慢了 抱歉.... 可以給下具體代碼塊嗎?感謝~(另,三樓有問題補充)
2017-02-13 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

分頁攔截器怎么把記錄總條數(shù)傳出?

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號