一:综述:
本节在前几节项目结构的基础上增加一个db组件的封装,主要是基于mybatis-plus,增加几个自定义的方法,介绍mybatis-plus中如何自定义基础方法,同时增加SQL运行日志。
二:基础知识简述:
1.模块创建过程
1> 创建如图模块
修改POM文件为如下(依赖中新增的三方包需要在immortal-maqiao-depencies中增加版本管理):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>immortal-maqiao-core</artifactId>
<groupId>immortal-maqiao</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>immortal-maqiao-core-mybatis</artifactId>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
</dependency>
</dependencies>
</project>
2.增加props属性类(不是必须),用于获取组件中需要的属性信息,例如本模块需要根据配置判断是否需要打印sql信息,因此增加一个sql属性用来配置,如下图:
@Getter
@Setter
@RefreshScope
@ConfigurationProperties("mq.immortal.mybatis")
public class ImmortalMyBatisProps {
//是否打印
private boolean sql = true;
}
2>通过集成FilterEventAdapter配置日志过滤器
FilterEventAdapter是Druid中的一个拦截过滤器,这里不对他进行详细解释网上有很多的源码解析,这里只做使用说明:
Druid提供的Filter-Chain机制,可通过继承FilterEventAdapter把自定义的过滤器增加到原有执行链中,从而实现自定义sql拦截。
可以在SQL执行前 执行后等各种状态进行拦截,我们只拦截他statement在关闭时进行sql打印。
@Slf4j
@RequiredArgsConstructor
public class SqlLogFilter extends FilterEventAdapter {
private static final SQLUtils.FormatOption FORMAT_OPTION = new SQLUtils.FormatOption(false, false);
private final MqImmortalBybatisProps mqImmortalBybatisProps;
@Override
protected void statementExecuteBefore(StatementProxy statement, String sql) {
statement.setLastExecuteStartNano();
}
@Override
protected void statementExecuteBatchBefore(StatementProxy statement) {
statement.setLastExecuteStartNano();
}
@Override
protected void statementExecuteUpdateBefore(StatementProxy statement, String sql) {
statement.setLastExecuteStartNano();
}
@Override
protected void statementExecuteQueryBefore(StatementProxy st