• 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>
    

     

  • 相关阅读:
    Excel标题与索引的对应关系
    拼接LINQ动态表达式
    根据输入的模型属性表达式获取名称
    如何将页面的<br/>在Excel中正确换行
    针对VM从挂机-启动后,docker相关服务的无法使用问题!
    NIO(三):Selector选择器
    NIO(二):Channel通道
    Netty(一):netty的入门使用。
    设计模式(五):原型模式
    NIO(一):Buffer缓冲区
  • 原文地址:https://www.cnblogs.com/niejunlei/p/6346610.html
Copyright © 2020-2023  润新知