摘要:剛學(xué)習(xí)攔截器方面,在網(wǎng)上找了很多關(guān)于攔截器方面的文章,自己也嘗試過寫過幾個,但是關(guān)于結(jié)果集的攔截始終沒有找到合適的不要噴我,畢竟是新手。
剛學(xué)習(xí)Mybatis攔截器方面,在網(wǎng)上找了很多關(guān)于Mybatis攔截器方面的文章,自己也嘗試過寫過幾個,但是關(guān)于結(jié)果集的攔截始終沒有找到合適的(PS: 不要噴我,畢竟是新手)。也在segmentfault 上提問過,依然沒有找到一個易于理解的,后來自己慢慢理解了以后,自己寫了個入門的,作為自己的回答。
用Mybatis實現(xiàn)過如下需求
數(shù)據(jù)表查詢用戶基本信息表,查詢結(jié)果返回是List的結(jié)果集,對其中的某個字段進行加密
CREATE TABLE usr_basic_inf( USR_ID VARCHAR(20) NOT NULL COMMENT "用戶ID,01+18位互斥隨機數(shù)" , USR_REAL_NME VARCHAR(50) NOT NULL COMMENT "用戶真實姓名" , CERT_TYPE VARCHAR(4) COMMENT "證件種類" , CERT_NO VARCHAR(100) COMMENT "證件號碼" , RES_FLD VARCHAR(300) COMMENT "預(yù)留字段 " , PRIMARY KEY(USR_ID) ) COMMENT="用戶基礎(chǔ)信息表";數(shù)據(jù)
USR_ID | USR_REAL_NME | CERT_TYPE | CERT_NO | RES_FLD |
---|---|---|---|---|
01000000000000000001 | 張三 | 0101 | 101222010199913291 | (NULL) |
使用Mybatis對Executor.class的"qurey"方法進行攔截,并對返回結(jié)果集進行處理
package com.ceabox.interceptor; import java.util.ArrayList; import java.util.Map; import java.util.Properties; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.plugin.Intercepts; import org.apache.ibatis.plugin.Invocation; import org.apache.ibatis.plugin.Plugin; import org.apache.ibatis.plugin.Signature; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; @Intercepts({ @Signature(type = Executor.class, method = "query", args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class }) }) public class InterceptorForQry implements Interceptor { @SuppressWarnings({ "rawtypes", "unchecked" }) public Object intercept(Invocation invocation) throws Throwable { Object result = invocation.proceed(); //執(zhí)行請求方法,并將所得結(jié)果保存到result中 if (result instanceof ArrayList) { ArrayList resultList = (ArrayList) result; for (int i = 0; i < resultList.size(); i++) { if (resultList.get(i) instanceof Map) { Map resultMap = (Map) resultList.get(i); resultMap.put("CERT_NO", "這個是加密結(jié)果"); //取出相應(yīng)的字段進行加密 } } } return result; } public Object plugin(Object target) { System.out.println("this is the proceed ===>>" + target); return Plugin.wrap(target, this); } public void setProperties(Properties arg0) { System.out.println("this is the properties ===>>" + arg0); } }mybatis-config.xml
在mybatis配置文件中注冊插件:
測試輸出
{ USR_ID=01000000000000000001, RES_FLD=null, CERT_NO=這個是加密結(jié)果, CERT_TYPE=0101, USR_REAL_NME=張三 }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/66486.html
摘要:攔截器的使用場景主要是更新數(shù)據(jù)庫的通用字段,分庫分表,加解密等的處理。攔截器均需要實現(xiàn)該接口。攔截器攔截器的使用需要查看每一個所提供的方法參數(shù)。對應(yīng)構(gòu)造器,為,為,為??蓞⒖紨r截器原理探究。 攔截器(Interceptor)在 Mybatis 中被當做插件(plugin)對待,官方文檔提供了 Executor(攔截執(zhí)行器的方法),ParameterHandler(攔截參數(shù)的處理),Re...
摘要:最終能和面試官聊的開心愉快投緣的叫面霸。能夠與很好的集成提供映射標簽,支持對象與數(shù)據(jù)庫的字段關(guān)系映射提供對象關(guān)系映射標簽,支持對象關(guān)系組件維護。使用可以有效的防止注入,提高系統(tǒng)安全性。 showImg(https://segmentfault.com/img/bVbsSlt?w=358&h=269); 一、概述 面試,難還是不難?取決于面試者的底蘊(氣場+技能)、心態(tài)和認知及溝通技巧。...
摘要:執(zhí)行沒有,批處理不支持,將所有都添加到批處理中,等待統(tǒng)一執(zhí)行,它緩存了多個對象,每個對象都是完畢后,等待逐一執(zhí)行批處理。 Mybatis常見面試題 #{}和${}的區(qū)別是什么? #{}和${}的區(qū)別是什么? 在Mybatis中,有兩種占位符 #{}解析傳遞進來的參數(shù)數(shù)據(jù) ${}對傳遞進來的參數(shù)原樣拼接在SQL中 #{}是預(yù)編譯處理,${}是字符串替換。 使用#{}可以有效的防止...
摘要:的簡稱,運行環(huán)境,為的運行提供了所需環(huán)境。分割字符串,返回一個分割后的字符串數(shù)組。線程安全是線程安全的,而是非線程安全的。迭代器取代了集合框架中的,迭代器允許調(diào)用者在迭代過程中移除元素。 本文分為十九個模塊,分別是:?Java 基礎(chǔ)、容器、多線程、反射、對象拷貝、Java Web 、異常、網(wǎng)絡(luò)、設(shè)計模式、Spring/Spring MVC、Spring Boot/Spring Clou...
摘要:跳槽時時刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來期間也沒有準備充分,到底是因為技術(shù)原因影響自己的發(fā)展,偏移自己規(guī)劃的軌跡,還是錢給少了,不受重視。 跳槽時時刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來(期間也沒有準備充分),到底是因為技...
閱讀 3788·2021-11-17 09:33
閱讀 2861·2021-09-22 15:12
閱讀 3415·2021-08-12 13:24
閱讀 2520·2019-08-30 11:14
閱讀 1796·2019-08-29 14:09
閱讀 1379·2019-08-26 14:01
閱讀 3143·2019-08-26 13:49
閱讀 1838·2019-08-26 12:16