美文网首页Spring-Boot
spring boot中使用hibernate 拦截sql语句

spring boot中使用hibernate 拦截sql语句

作者: else05 | 来源:发表于2018-03-09 17:40 被阅读1025次

google上没有找到详细教程,自己折腾完后记录一下使用过程。
场景:在hibernate执行sql之前拦截并检查sql是否有指定参数。


环境:
jdk : jdk 8
framework : spring-boot , spring-data-jpa
要实现这个功能可以使用 hibernate 的拦截器(EmptyInterceptor)或监听器 。
这里使用StatementInspector接口实现 (算是拦截器中的接口)

一、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
二、实现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
使用总结:
  1. 实现StatementInspector
  2. 配置启用

参考:

相关文章

网友评论

    本文标题:spring boot中使用hibernate 拦截sql语句

    本文链接:https://www.haomeiwen.com/subject/izcsfftx.html