google上沒有找到詳細(xì)教程锭环,自己折騰完后記錄一下使用過程。
場景:在hibernate執(zhí)行sql之前攔截并檢查sql是否有指定參數(shù)泊藕。
環(huán)境:
jdk : jdk 8
framework : spring-boot , spring-data-jpa
要實現(xiàn)這個功能可以使用 hibernate 的攔截器(EmptyInterceptor)或監(jiān)聽器 辅辩。
這里使用StatementInspector接口實現(xiàn) (算是攔截器中的接口)
一、StatementInspector 接口 org.hibernate.resource.jdbc.spi.StatementInspector
這個接口是攔截器中抽取的來的娃圆,org.hibernate.Interceptor
接口中的onPrepareStatement(String sql) 方法棄用后抽取出來的
/**
* Called when sql string is being prepared.
* @param sql sql to be prepared
* @return original or modified sql
*
* @deprecated Supply a {@link org.hibernate.resource.jdbc.spi.StatementInspector} instead, if you wish
* to inspect and alter SQL statements.
*/
@Deprecated
String onPrepareStatement(String sql);
image.png
二玫锋、實現(xiàn)StatementInspector
package com.demo.inspector;
import org.hibernate.resource.jdbc.spi.StatementInspector;
public class SqlStatementInspector implements StatementInspector {
@Override
public String inspect(String sql) {
// 這里可以攔截到sql , 這里的sql格式會有占位符讼呢? 如:select u.name from user u where u.id = ?
return sql;
}
}
三撩鹿、配置application.yml 啟用
spring:
jpa:
properties:
hibernate:
session_factory:
statement_inspector: com.demo.inspector.SqlStatementInspector
- image.png
使用總結(jié):
- 實現(xiàn)StatementInspector
- 配置啟用