使用hibernate拦截sql语句并输出获取sql语句

hibernate,sql 专栏收录该内容
1 篇文章 0 订阅

重建包名

org.hibernate.type.descriptor.sql

重建类BasicBinder 

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package  org.hibernate.type.descriptor.sql;
 
import  java.sql.PreparedStatement;
import  java.sql.SQLException;
 
import  org.hibernate.internal.CoreLogging;
import  org.hibernate.type.descriptor.JdbcTypeNameMapper;
import  org.hibernate.type.descriptor.ValueBinder;
import  org.hibernate.type.descriptor.WrapperOptions;
import  org.hibernate.type.descriptor.java.JavaTypeDescriptor;
import  org.jboss.logging.Logger;
 
public  abstract  class  BasicBinder<J>  implements  ValueBinder<J>{
 
     private  static  final  Logger log = CoreLogging.logger( BasicBinder. class  );
 
     private  static  final  String BIND_MSG_TEMPLATE =  "binding parameter [%s] as [%s] - [%s]" ;
     private  static  final  String NULL_BIND_MSG_TEMPLATE =  "binding parameter [%s] as [%s] - [null]" ;
 
     private  final  JavaTypeDescriptor<J> javaDescriptor;
     private  final  SqlTypeDescriptor sqlDescriptor;
 
     public  JavaTypeDescriptor<J> getJavaDescriptor() {
         return  javaDescriptor;
     }
 
     public  SqlTypeDescriptor getSqlDescriptor() {
         return  sqlDescriptor;
     }
 
     public  BasicBinder(JavaTypeDescriptor<J> javaDescriptor, SqlTypeDescriptor sqlDescriptor) {
         this .javaDescriptor = javaDescriptor;
         this .sqlDescriptor = sqlDescriptor;
     }
 
     @Override
     public  final  void  bind(PreparedStatement st, J value,  int  index, WrapperOptions options)  throws  SQLException {
         final  boolean  traceEnabled = log.isTraceEnabled();
       
         if  ( value ==  null  ) {
             if  ( traceEnabled ) {
                 log.trace(
                         String.format(
                                 NULL_BIND_MSG_TEMPLATE,
                                 index,
                                 JdbcTypeNameMapper.getTypeName( getSqlDescriptor().getSqlType() )
                         )
                 );
             }
             st.setNull( index, sqlDescriptor.getSqlType() );
         }
         else  {
             if  ( traceEnabled ) {
                 log.trace(
                         String.format(
                                 BIND_MSG_TEMPLATE,
                                 index,
                                 JdbcTypeNameMapper.getTypeName( sqlDescriptor.getSqlType() ),
                                 getJavaDescriptor().extractLoggableRepresentation( value )
                         )
                 );
             }
             
             doBind( st, value, index, options );
         }
        
         System.out.println(st.toString());
     }
 
     /**
      * Perform the binding.  Safe to assume that value is not null.
      *
      * @param st The prepared statement
      * @param value The value to bind (not null).
      * @param index The index at which to bind
      * @param options The binding options
      *
      * @throws SQLException Indicates a problem binding to the prepared statement.
      */
     protected  abstract  void  doBind(PreparedStatement st, J value,  int  index, WrapperOptions options)  throws  SQLException;
 
 
}

  因为在hibernate机制中,就是用这个类是是执行更新插入sql语句的类,这里重写,把它覆盖

       原文地址:https://www.cnblogs.com/bornteam/p/5068776.html

转载请声明出处

  • 0
    点赞
  • 2
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值