• mybatis定义拦截器


    applicationContext.xml

        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
            lazy-init="false">
            <property name="dataSource" ref="dataSource" />
            <property name="configLocation" value="classpath:SqlMapConfig.xml" />
            <property name="plugins">
                <list>
                    <bean class="com.fyh.www.common.interceptor.SqlLogInterceptor" />
                </list>
            </property>
        </bean>
    
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="annotationClass" value="org.springframework.stereotype.Repository" /><!-- 记得加注解 @Repository -->
            <property name="basePackage" value="com.fyh.www" />
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        </bean>
            


    SqlMapConfig.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
        <settings>
            <setting name="lazyLoadingEnabled" value="false" />
            <setting name="cacheEnabled" value="true" />
        </settings>
        
    <!--     在map.xml文件中配置如下 -->
    <!--     <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>  -->
    </configuration>

    记录sql语句拦截器的具体实现

    package com.fyh.www.common.interceptor;
    
    import java.sql.Connection;
    import java.util.List;
    import java.util.Properties;
    import java.util.StringTokenizer;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.ibatis.executor.statement.StatementHandler;
    import org.apache.ibatis.mapping.BoundSql;
    import org.apache.ibatis.mapping.ParameterMapping;
    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.log4j.Logger;
    /**
     * mybatis 日志拦截器,只拦截实现了StatementHandler接口,方法参数 是Connection的prepare方法
     * @author pc
     *
     */
    
    @Intercepts(@Signature(type=StatementHandler.class,method="prepare",args=Connection.class))
    public class SqlLogInterceptor implements Interceptor {
        
        protected final Logger log = Logger.getLogger(SqlLogInterceptor.class);
        
        /**
         * 对原方法prepare方法进行拦截增强
         */
        @Override
        public Object intercept(Invocation invocation) throws Throwable {
            // TODO Auto-generated method stub
            StatementHandler statementHandler = (StatementHandler)invocation.getTarget();
            BoundSql boundSql = statementHandler.getBoundSql();
            Object parameterObject = statementHandler.getParameterHandler().getParameterObject();
            StringBuffer sb = new StringBuffer();
            sb.append(new StringBuilder().append(removeBreakingWhitespace(boundSql.getSql())).toString());
            List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
            for (ParameterMapping parameterMapping : parameterMappings) {
                String param = parameterMapping.getProperty();
                try {
                    sb.append(new StringBuilder().append("[").append(param).append(":")
                            .append(BeanUtils.getProperty(parameterObject, param)).append("]").toString());
                } catch (Exception e) {
                    sb.append(new StringBuilder().append("[").append(param).append(":").append(parameterObject).append("]").toString());
                }
                
            }
             
            
            Object result = null;
            try {
                result = invocation.proceed();
                log.info(sb.toString());
            } catch (Exception e) {
                log.error(sb.toString());
            }
            
            
            return result;
        }
        
        /**
         * 去除空格和换行
         * @param original 原始字符串
         * @return
         */
        public String removeBreakingWhitespace(String original){
            StringTokenizer stringTokenizer = new StringTokenizer(original);
            StringBuffer sb = new StringBuffer();
            while(stringTokenizer.hasMoreTokens()){
                sb.append(stringTokenizer.nextToken());
            }
            return sb.toString();
            
        }
        
        
        
        /**
         * 返回对象,如果返回原对象不拦截,如果返回代理则拦截
         */
        @Override
        public Object plugin(Object object) {
            // TODO Auto-generated method stub
            return Plugin.wrap(object, this);
        }
        /**
         * 此方法用来获取配置参数
         */
        @Override
        public void setProperties(Properties properties) {
            // TODO Auto-generated method stub
            
        }
    
    }
  • 相关阅读:
    UGUI ScrollView 自适应高度
    OnApplicationFocus 与 OnApplicationPause
    unity读取二进制配置文件
    sprite实现影子
    protobuf 标签DataFormat =DataFormat.FixedSize解决连续int字段无法解析
    unity显示网络延迟ping
    ios piv6遭拒绝
    读取FTP上的某个文本文档内容到本地
    EF提交插入数据catch捕获具体异常方法
    ASP.NET后台调用API 方法 POST方式
  • 原文地址:https://www.cnblogs.com/woms/p/6038251.html
Copyright © 2020-2023  润新知