摘要:刚学习拦截器方面,在网上找了很多关于拦截器方面的文章,自己也尝试过写过几个,但是关于结果集的拦截始终没有找到合适的不要喷我,毕竟是新手。
刚学习Mybatis拦截器方面,在网上找了很多关于Mybatis拦截器方面的文章,自己也尝试过写过几个,但是关于结果集的拦截始终没有找到合适的(PS: 不要喷我,毕竟是新手)。也在segmentfault 上提问过,依然没有找到一个易于理解的,后来自己慢慢理解了以后,自己写了个入门的,作为自己的回答。
用Mybatis实现过如下需求
数据表查询用户基本信息表,查询结果返回是List的结果集,对其中的某个字段进行加密
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-config.xml
在mybatis配置文件中注册插件:
测试输出
{ USR_ID=01000000000000000001, RES_FLD=null, CERT_NO=这个是加密结果, CERT_TYPE=0101, USR_REAL_NME=张三 }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66486.html
摘要:拦截器的使用场景主要是更新数据库的通用字段,分库分表,加解密等的处理。拦截器均需要实现该接口。拦截器拦截器的使用需要查看每一个所提供的方法参数。对应构造器,为,为,为。可参考拦截器原理探究。 拦截器(Interceptor)在 Mybatis 中被当做插件(plugin)对待,官方文档提供了 Executor(拦截执行器的方法),ParameterHandler(拦截参数的处理),Re...
摘要:最终能和面试官聊的开心愉快投缘的叫面霸。能够与很好的集成提供映射标签,支持对象与数据库的字段关系映射提供对象关系映射标签,支持对象关系组件维护。使用可以有效的防止注入,提高系统安全性。 showImg(https://segmentfault.com/img/bVbsSlt?w=358&h=269); 一、概述 面试,难还是不难?取决于面试者的底蕴(气场+技能)、心态和认知及沟通技巧。...
摘要:执行没有,批处理不支持,将所有都添加到批处理中,等待统一执行,它缓存了多个对象,每个对象都是完毕后,等待逐一执行批处理。 Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是预编译处理,${}是字符串替换。 使用#{}可以有效的防止...
摘要:的简称,运行环境,为的运行提供了所需环境。分割字符串,返回一个分割后的字符串数组。线程安全是线程安全的,而是非线程安全的。迭代器取代了集合框架中的,迭代器允许调用者在迭代过程中移除元素。 本文分为十九个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Clou...
摘要:跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来期间也没有准备充分,到底是因为技术原因影响自己的发展,偏移自己规划的轨迹,还是钱给少了,不受重视。 跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技...
阅读 3682·2021-11-17 09:33
阅读 2631·2021-09-22 15:12
阅读 3309·2021-08-12 13:24
阅读 2390·2019-08-30 11:14
阅读 1692·2019-08-29 14:09
阅读 1305·2019-08-26 14:01
阅读 3024·2019-08-26 13:49
阅读 1737·2019-08-26 12:16