在系统开发过程中,涉及到数据库操作都是SQL的天下,基于ORM的各类框架来简化开发;在JPA/Hibernate方案中,只提供了SQL的打印输出,但并未输入SQL的参数值是多少,这里将解决这个问题,告知具体如何来实现这个操作。
1. 技术栈的介绍
JDK 1.8, Spring Boot 2.0.3.RELEASE, Mysql 5.7
2. 依赖包
Spring Boot中的JPA依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.googlecode.log4jdbc</groupId>
<artifactId>log4jdbc</artifactId>
<version>1.2</version>
</dependency>
3. log4jdbc的介绍
log4jdbc使用SLF4J(Simple Logging Facade For Java)作为日志系统。特性:
- 支持JDBC3和JDBC4,其中JDBC3对应于JDK 1.4 or 1.5,JDBC4要求JDK 1.6或以上。
- 支持现有大部分JDBC驱动。
- 易于配置(在大部分情况下,只需要改变驱动类名并在jdbc url前加上”jdbc:log4“,设置好日志输出级别)。
- 能够自动把SQL变量值加到SQL输出日志中,改进易读性和方便调试。
- 能够快速标识出应用程序中执行比较慢的SQL语句。
- 能够生成SQL连接数信息帮助识别连接池/线程问题。
综合一句话,log4jdbc可以帮我们实现一个抓取SQL中实际使用值的功能。
4. Spring Boot示例
application.properties内容:
spring.datasource.driver-class-name = net.sf.log4jdbc.DriverSpy
spring.datasource.url= jdbc:log4jdbc:mysql://127.0.0.1:3306/demo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
spring.datasource.username = root
spring.datasource.password = 123123
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.initialization-mode=never
spring.datasource.hikari.minimum-idle=0
spring.datasource.hikari.idle-timeout=10800000
spring.datasource.hikari.max-lifetime=21600000
spring.datasource.hikari.connection-timeout=6000
spring.datasource.hikari.initialization-fail-timeout=0
spring.