package com.zanxiang.sdk.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.cache.CacheKey; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; import java.sql.Connection; import java.sql.SQLException; /** * @Author wcc * @Date 2020/9/11 9:30 * @Version 1.0 * @Description */ @Configuration @EnableTransactionManagement @MapperScan("com.zanxiang.sdk.mapper") public class MybatisPlusConfig { /** * 分页插件 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); interceptor.addInnerInterceptor(new DatascopeInterceptor()); return interceptor; } @Slf4j public static class DatascopeInterceptor implements InnerInterceptor { /** * {@link Executor#query(MappedStatement, Object, RowBounds, ResultHandler, CacheKey, BoundSql)} 操作前置处理 *

* 改改sql啥的 * * @param executor Executor(可能是代理对象) * @param ms MappedStatement * @param parameter parameter * @param rowBounds rowBounds * @param resultHandler resultHandler * @param boundSql boundSql */ @Override public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { /*System.out.println("-- beforeQuery --"); try { Select select = (Select) CCJSqlParserUtil.parse(boundSql.getSql()); SelectBody selectBody = select.getSelectBody(); if (selectBody instanceof PlainSelect) { PlainSelect plainSelect = (PlainSelect) selectBody; List orderByElements = plainSelect.getOrderByElements(); System.out.println(select.toString()); } else if (selectBody instanceof SetOperationList) { SetOperationList setOperationList = (SetOperationList) selectBody; List orderByElements = setOperationList.getOrderByElements(); System.out.println(select.toString()); } else if (selectBody instanceof WithItem) { // todo: don't known how to resole System.out.println(selectBody); } } catch (JSQLParserException e) { log.warn("failed to parse sql, exception:\n" + e.getCause()); }*/ } /** * {@link StatementHandler#prepare(Connection, Integer)} 操作前置处理 *

* 改改sql啥的 * * @param sh StatementHandler(可能是代理对象) * @param connection Connection * @param transactionTimeout transactionTimeout */ @Override public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) { //System.out.println("-- beforePrepare --"); } } }