JPA打印sql及参数

开启打印sql配置

yml文件中增加如下配置即可在控制台输出sql内容

spring:
	jpa:
		show-sql: true

此配置网上很多,不做详细解说

此处附上格式化sql的配置:

spring:
	jpa:
		properties:
			hibernate:
				format_sql: true 

和并后如下

spring:
	jpa:
		show-sql: true
		properties:
			hibernate:
				format_sql: true 

开启打印sql参数

网上有找了很多资料,有各种配置,但是好时生效,换个项目又失效。

经亲测后总结如下配置:

hibernate 6.0以前(5.x亲测,4.x未测)的配置方式:

logging:
  level:
    root: info
    org.hibernate.type.descriptor.sql.BasicBinder: trace

hibernate 6.0及以后:

logging:
  level:
    root: info
    org.hibernate.orm.jdbc.bind: trace

究其原因,从员代码中即可看出,如下是6.0前后源码的区别:

6.0以前的源码

6.0以前的源码

6.0及其后的源码

6.0及其后的源码

区别:

  1. 包路径有变动:6.0以前是org.hibernate.type.descriptor.sql.BasicBinder,6.0开始变为org.hibernate.type.descriptor.jdbc.BasicBinder

  2.  6.0以前使用的是org.hibernate.type.descriptor.sql.BasicBinder类的log打印,其log定义如下:
    
    private static final Logger log = CoreLogging.logger( BasicBinder.class );
    
     6.0开始使用的是org.hibernate.type.descriptor.JdbcBindingLogging类打印,该类定义如下:
    
    @SubSystemLogging(
    		name = JdbcBindingLogging.NAME,// org.hibernate.orm.jdbc.bind
    		description = "Logging of JDBC parameter value binding"
    )
    public interface JdbcBindingLogging {
    	String NAME = SubSystemLogging.BASE + ".jdbc.bind";
    
    	Logger LOGGER = Logger.getLogger( NAME );
    
    	boolean TRACE_ENABLED = LOGGER.isTraceEnabled();
    	boolean DEBUG_ENABLED = LOGGER.isDebugEnabled();
    
    	static void logBinding(int jdbcPosition, int typeCode, Object value) {
    		assert TRACE_ENABLED;
    
    		LOGGER.tracef(
    				"binding parameter [%s] as [%s] - [%s]",
    				jdbcPosition,
    				JdbcTypeNameMapper.getTypeName( typeCode ),
    				value
    		);
    	}
    
    	static void logNullBinding(int jdbcPosition, int typeCode) {
    		assert TRACE_ENABLED;
    
    		LOGGER.tracef(
    				"binding parameter [%s] as [%s] - [null]",
    				jdbcPosition,
    				JdbcTypeNameMapper.getTypeName( typeCode )
    		);
    	}
    
    	static void logBinding(String callableParameterName, int typeCode, Object value) {
    		assert TRACE_ENABLED;
    
    		LOGGER.tracef(
    				"binding parameter [%s] as [%s] - [%s]",
    				callableParameterName,
    				JdbcTypeNameMapper.getTypeName( typeCode ),
    				value
    		);
    	}
    
    	static void logNullBinding(String callableParameterName, int typeCode) {
    		assert TRACE_ENABLED;
    
    		LOGGER.tracef(
    				"binding parameter [%s] as [%s] - [null]",
    				callableParameterName,
    				JdbcTypeNameMapper.getTypeName( typeCode )
    		);
    	}
    
    }
    

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/d865082e06.html