网上找了一大堆资料,都是说mybatis拦截器可以对
1、拦截执行器的方法
2、拦截参数的处理
3、拦截结果集的处理
4、拦截Sql语法构建的处理
但是看到的一大堆都是对1、2、4的处理,对拦截结果集的处理没有找到,望大神们给个案例,谢谢!
网上找了一大堆资料,都是说mybatis拦截器可以对
1、拦截执行器的方法
2、拦截参数的处理
3、拦截结果集的处理
4、拦截Sql语法构建的处理
但是看到的一大堆都是对1、2、4的处理,对拦截结果集的处理没有找到,望大神们给个案例,谢谢!
用Mybatis
实现过如下需求
查询用户基本信息表,查询结果返回是List<Map<String,Object>>的结果集,对其中的某个字段进行加密
CREATE TABLE usr_basic_inf(
USR_ID VARCHAR(20) NOT NULL COMMENT '用户ID,01+18位互斥随机数' ,
USR_REAL_NME VARCHAR(50) NOT NULL COMMENT '用户真实姓名' ,
CERT_TYPE VARCHAR(4) COMMENT '证件种类' ,
CERT_NO VARCHAR(100) COMMENT '证件号码' ,
RES_FLD VARCHAR(300) COMMENT '预留字段 ' ,
PRIMARY KEY(USR_ID)
) COMMENT='用户基础信息表';
USR_ID | USR_REAL_NME | CERT_TYPE | CERT_NO | RES_FLD |
---|---|---|---|---|
01000000000000000001 | 张三 | 0101 | 101222010199913291 | (NULL) |
使用Mybatis
对Executor.class
的'qurey'
方法进行拦截,并对返回结果集进行处理
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(); //执行请求方法,并将所得结果保存到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", "这个是加密结果"); //取出相应的字段进行加密
}
}
}
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配置文件中注册插件:
<plugins>
<plugin interceptor="com.ceabox.interceptor.InterceptorForQry"></plugin>
</plugins>
{ USR_ID=01000000000000000001, RES_FLD=null, CERT_NO=这个是加密结果, CERT_TYPE=0101, USR_REAL_NME=张三 }
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.6k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
用
MyBatis
结果集拦截器做过这样一个需求:数据表
数据:
JSONPlugin拦截器
使用
MyBatis
拦截器对ResultSetHandler
接口的handleResultSets
方法进行拦截:mybatis-config.xml
在mybatis配置文件中注册插件:
测试输出