springboot关于jpa实现sql显示

1. sql语句打印

  jpa:
    # 显示sql语句
    show-sql: true
    properties:
      hibernate:
        # 格式化sql语句
        format_sql: true

2. 显示传入参数

通过上面的配置,我们只能在日志中查看执行的sql语句,至于传入的参数我们无法获取。所以需要增加如下配置:

logging:
  level:
    # 基本类型绑定
    org.hibernate.type.descriptor.sql.BasicBinder: trace
    # 枚举类型绑定
    org.hibernate.metamodel.model.convert.internal.NamedEnumValueConverter: trace

这里为什么是trace呢?我们可以通过如下两段代码可知:

  • BasicBinder
    public final void bind(PreparedStatement st, J value, int index, WrapperOptions options) throws SQLException {
        boolean traceEnabled = log.isTraceEnabled();
        if (value == null) {
            if (traceEnabled) {
                log.trace(String.format("binding parameter [%s] as [%s] - [null]", index, JdbcTypeNameMapper.getTypeName(this.getSqlDescriptor().getSqlType())));
            }
    
            st.setNull(index, this.sqlDescriptor.getSqlType());
        } else {
            if (traceEnabled) {
                log.trace(String.format("binding parameter [%s] as [%s] - [%s]", index, JdbcTypeNameMapper.getTypeName(this.sqlDescriptor.getSqlType()), this.getJavaDescriptor().extractLoggableRepresentation(value)));
            }
    
            this.doBind(st, value, index, options);
        }
    
    }
    
    public final void bind(CallableStatement st, J value, String name, WrapperOptions options) throws SQLException {
        boolean traceEnabled = log.isTraceEnabled();
        if (value == null) {
            if (traceEnabled) {
                log.trace(String.format("binding parameter [%s] as [%s] - [null]", name, JdbcTypeNameMapper.getTypeName(this.getSqlDescriptor().getSqlType())));
            }
    
            st.setNull(name, this.sqlDescriptor.getSqlType());
        } else {
            if (traceEnabled) {
                log.trace(String.format("binding parameter [%s] as [%s] - [%s]", name, JdbcTypeNameMapper.getTypeName(this.sqlDescriptor.getSqlType()), this.getJavaDescriptor().extractLoggableRepresentation(value)));
            }
    
            this.doBind(st, value, name, options);
        }
    
    }
    
    • NamedEnumValueConverter
       public void writeValue(PreparedStatement statement, E value, int position) throws SQLException {
       	String jdbcValue = value == null ? null : this.toRelationalValue(value);
       	boolean traceEnabled = log.isTraceEnabled();
       	if (jdbcValue == null) {
       		if (traceEnabled) {
       			log.tracef("Binding null to parameter: [%s]", position);
       		}
      
       		statement.setNull(position, this.getJdbcTypeCode());
       	} else {
       	if (traceEnabled) {
       		log.tracef("Binding [%s] to parameter: [%s]", jdbcValue, position);
       	}
       	statement.setString(position, jdbcValue);
       }
      

3. 显示效果

由上诉代码可以看出基本类型和枚举类型的日志形式是不一样的,注意1号参数和10号参数和其他的参数格式形式。

Hibernate:
insert
into
streetview
(auth_state, create_time, data_entity_id, description, maxx, maxy, minx, miny, progress, status, sv_name, table_name, update_time, url, user_id, id)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2021-10-14 12:00:41.892 [http-nio-8270-exec-7] TRACE o.h.m.m.convert.internal.NamedEnumValueConverter - Binding [PUBLIC] to parameter: [1]
2021-10-14 12:00:41.893 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu Oct 14 12:00:41 GMT+08:00 2021]
2021-10-14 12:00:41.895 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [BIGINT] - [null]
2021-10-14 12:00:41.895 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [VARCHAR] - [null]
2021-10-14 12:00:41.896 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [DOUBLE] - [113.6]
2021-10-14 12:00:41.896 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [DOUBLE] - [22.225]
2021-10-14 12:00:41.896 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [DOUBLE] - [113.525]
2021-10-14 12:00:41.897 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [DOUBLE] - [22.1]
2021-10-14 12:00:41.897 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [DOUBLE] - [0.0]
2021-10-14 12:00:41.897 [http-nio-8270-exec-7] TRACE o.h.m.m.convert.internal.NamedEnumValueConverter - Binding [CREATE] to parameter: [10]
2021-10-14 12:00:41.897 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [VARCHAR] - [Hongkong]
2021-10-14 12:00:41.897 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [VARCHAR] - [5ce0a28e33ff1d218efdc9ec0d77d8ea]
2021-10-14 12:00:41.897 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [TIMESTAMP] - [Thu Oct 14 12:00:41 GMT+08:00 2021]
2021-10-14 12:00:41.897 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [VARCHAR] - [/home/test]
2021-10-14 12:00:41.898 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [0]
2021-10-14 12:00:41.898 [http-nio-8270-exec-7] TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [BIGINT] - [60]

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

surpassLiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值