博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Mybatis拦截器对结果集的拦截
阅读量:6685 次
发布时间:2019-06-25

本文共 2635 字,大约阅读时间需要 8 分钟。

刚学习Mybatis拦截器方面,在网上找了很多关于Mybatis拦截器方面的文章,自己也尝试过写过几个,但是关于结果集的拦截始终没有找到合适的(PS: 不要喷我,毕竟是新手)。也在segmentfault 上提问过,依然没有找到一个易于理解的,后来自己慢慢理解了以后,自己写了个入门的,作为自己的回答。

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)

使用MybatisExecutor.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-config.xml

在mybatis配置文件中注册插件:

测试输出

{ USR_ID=01000000000000000001, RES_FLD=null, CERT_NO=这个是加密结果, CERT_TYPE=0101, USR_REAL_NME=张三 }

转载地址:http://kpaao.baihongyu.com/

你可能感兴趣的文章
Eclipse上安装GIT插件EGit及使用
查看>>
SUSE安装SSH
查看>>
swt定时器的实现 .
查看>>
exchange2010赋予普通用户新建和删除邮箱的权限
查看>>
CRS-0215: Could not start resource 'ora.DB.DB2.inst'
查看>>
图片里的英语
查看>>
iscsi客户端配置
查看>>
用Windows Server实现软件定义存储之存储空间直连
查看>>
花(cnm加强)
查看>>
有用J2ee学习资料下载地址
查看>>
如何对Redis设置密码,提高安全性
查看>>
cognos如何制作维表左关联事实表的报表
查看>>
Android基础(五) – Service生命周期及启动方式
查看>>
Nginx反向代理后端多节点下故障节点的排除思路
查看>>
error: No curses/termcap library found
查看>>
android之shape使用
查看>>
Java八大基本数据类型
查看>>
yum安装JDK
查看>>
C#中Dictionary的用法及用途
查看>>
BizTalkServer 如何接收 EDI 消息(7)
查看>>