zoukankan      html  css  js  c++  java
  • mybatis interceptor 处理查询参数及查询结果

    拦截器:拦截update,query方法,处理查询参数及返回结果。

    /**
     * Created by windwant on 2017/1/12.
     */
    @Intercepts({
            @Signature(type=Executor.class,method="update",args={MappedStatement.class,Object.class}),
            @Signature(type=Executor.class,method="query",args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class})
    })
    public class EncryptInterceptor implements Interceptor {
        public static final Logger logger = LoggerFactory.getLogger(EncryptInterceptor.class);
    
    
        @Override
        public Object intercept(Invocation invocation) throws Throwable {
            dealParameter(invocation);
            Object returnValue = invocation.proceed();
            dealReturnValue(returnValue);
            return returnValue;
        }
    
        //查询参数加密处理
        private void dealParameter(Invocation invocation) {
            MappedStatement statement = (MappedStatement) invocation.getArgs()[0];
            String mapperl = ConfigUtils.get("mybaits.mapper.path");
            String methodName = statement.getId().substring(statement.getId().indexOf(mapperl) + mapperl.length() + 1);
            if (methodName.startsWith("UserBaseMapper")){
                if(methodName.equals("UserBaseMapper.updateDriver")){
                    ((Driver) invocation.getArgs()[1]).encrypt();
                }
            }
            logger.info("Mybatis Encrypt parameters Interceptor, method: {}, args: {}", methodName, invocation.getArgs()[1]);
        }
    
        //查询结果解密处理
        private void dealReturnValue(Object returnValue){
            if(returnValue instanceof ArrayList<?>){
                List<?> list = (ArrayList<?>)returnValue;
                for(Object val: list){
                    if(val instanceof Passenger){///
                        //TODO
                    }
                    logger.info("Mybatis Decrypt result Interceptor, result object: {}", ToStringBuilder.reflectionToString(val));
                }
            }
        }
    
        @Override
        public Object plugin(Object target) {
            return Plugin.wrap(target, this);
        }
    
        @Override
        public void setProperties(Properties properties) {
    
        }
    }

    添加xml配置:

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                  <property name="typeAliasesPackage" value="com.xx.model"/>
                  <property name="dataSource" ref="dataSource"/>
                  <!-- 自动扫描mapping.xml文件 -->
                  <property name="mapperLocations" value="classpath*:mybatis/*.xml"></property>
                  <property name="plugins">//拦截器插件
                         <array>
                                <bean class="com.github.pagehelper.PageHelper">
                                       <property name="properties">
                                              <value>dialect=hsqldb</value>
                                       </property>
                                </bean>
                                <bean class="com.xx.interceptor.EncryptInterceptor">
                                       <property name="properties">
                                              <value>property-key=property-value</value>
                                       </property>
                                </bean>
                         </array>
                  </property>
           </bean>
    

     

  • 相关阅读:
    Coursera机器学习week11 单元测试
    关于 TypeReference 的解释
    getModifiers 方法解释。
    instanceof isInstance isAssignableFrom 比较
    elasticsearch 基础 语法总结
    kibana 启动 关闭 和进程查找
    MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别
    spring boot 项目 热启动
    java zip 压缩文件
    Packet for query is too large (1660 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
  • 原文地址:https://www.cnblogs.com/niejunlei/p/6346610.html
Copyright © 2011-2022 走看看