Spring Data Jpa:列印可執行Sql
阿新 • • 發佈:2022-05-17
預設情況下:開啟列印 jpa 的sql,配置如下:
spring:
jpa:
show-sql: true # 預設false,在日誌裡顯示執行的sql語句
列印效果:
這裡打印出來的sql種引數都是問號,複製出來無法使用。
那麼在配置檔案中加上:
logging:
level:
org.hibernate.type.descriptor.sql.BasicBinder: trace
加上這行配置後:
儘管打印出引數,但是sql中的引數還是問號,無法直接執行。
這時候我們可以使用p6spy去列印sql:
引入依賴:
<dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.8.6</version> </dependency>
增加p6spy的配置檔案spy.properties
在resource目錄下:spy.properties
autoflush=false dateformat=yyyy-MM-dd HH:mm:ss reloadproperties=true reloadpropertiesinterval=60 appender=com.p6spy.engine.spy.appender.Slf4JLogger logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat customLogMessageFormat=%(executionTime)ms | %(sqlSingleLine) databaseDialectDateFormat=yyyy-MM-dd HH:mm:ss databaseDialectBooleanFormat=boolean jmx=false excludecategories=info,debug,result,resultset,batch,commit,rollback
修改application.yml:
spring: # 配置資料來源資訊 datasource: #driverClassName: com.mysql.cj.jdbc.Driver #url: jdbc:mysql://localhost:3306/study?serverTimezone=Asia/Shanghai&characterEncoding=utf-8 username: root password: 1234 driver-class-name: com.p6spy.engine.spy.P6SpyDriver url: jdbc:p6spy:mysql://localhost:3306/study?serverTimezone=Asia/Shanghai&characterEncoding=utf-8 jpa: #show-sql: true # 預設false,在日誌裡顯示執行的sql語句 database: mysql hibernate.ddl-auto: update #指定為update,每次啟動專案檢測表結構有變化的時候會新增欄位,表不存在時會新建,如果指定create,則每次啟動專案都會清空資料並刪除表,再新建 properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect # 使用JPA建立表時,預設使用的儲存引擎是MyISAM,通過指定資料庫版本,可以使用InnoDB database-platform: org.hibernate.dialect.MySQL5Dialect hibernate: naming: #指定jpa的自動錶生成策略,駝峰自動對映為下劃線格式 implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl #physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
改動的地方:已經用紅框框出
執行效果:
這時候日誌中打印出來的sql是可以直接執行的。