
Spring Boot 3 移除了部分旧的 Hibernate 配置属性,因此在 Spring Boot 2.x 中使用的参数绑定日志配置可能不再有效。本文将介绍如何在 Spring Boot 3 中正确配置日志,以便显示 JPA 查询的 SQL 参数绑定信息。
配置日志级别要启用 SQL 参数绑定的日志记录,需要修改 application.properties 或 application.yml 文件,设置以下日志级别:
logging.level.org.hibernate.orm.jdbc.bind=trace logging.level.org.hibernate.type=trace logging.level.org.hibernate.stat=debug
或者,使用 YAML 格式:
logging:
level:
org:
hibernate:
orm:
jdbc:
bind: trace
type: trace
stat: debug 这些配置的作用如下:
- logging.level.org.hibernate.orm.jdbc.bind=trace: 启用 org.hibernate.orm.jdbc.bind 包的 trace 级别日志。该包负责处理 JDBC 参数绑定,trace 级别会输出详细的参数绑定信息。
- logging.level.org.hibernate.type=trace: 启用 org.hibernate.type 包的 trace 级别日志。这个包负责处理 Hibernate 类型转换,trace 级别会输出参数类型信息。
- logging.level.org.hibernate.stat=debug: 启用 org.hibernate.stat 包的 debug 级别日志。该包负责 Hibernate 的统计信息,debug 级别可以输出一些性能相关的调试信息,有助于优化查询。
假设我们有一个简单的 JPA 实体 User:
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int age;
// Getters and setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
} 以及一个对应的 JPA Repository:
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
} 在 Spring Boot 应用中,我们可以使用 UserRepository 查询数据,例如:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
@Autowired
private UserRepository userRepository;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
// Create a user
User user = new User();
user.setName("John Doe");
user.setAge(30);
userRepository.save(user);
// Find all users
userRepository.findAll();
}
} 配置上述日志级别后,运行程序,在控制台中可以看到如下类似的日志输出:
2023-10-27 10:00:00.000 TRACE [main] org.hibernate.orm.jdbc.bind - binding parameter [1] as [VARCHAR] - [John Doe] 2023-10-27 10:00:00.000 TRACE [main] org.hibernate.orm.jdbc.bind - binding parameter [2] as [INTEGER] - [30] ...
这些日志信息清楚地显示了 SQL 语句中每个参数的绑定值,有助于调试 SQL 查询。
注意事项- trace 级别的日志输出非常详细,可能会产生大量的日志信息,建议仅在开发和调试阶段启用。在生产环境中,可以考虑使用 debug 或 info 级别,以便减少日志量。
- 确保你的日志框架(例如 Logback 或 Log4j2)已正确配置,以便能够输出 trace 级别的日志。
- 如果仍然无法看到参数绑定信息,请检查是否覆盖了 Hibernate 的默认配置,例如自定义了 DataSource 或 EntityManagerFactory。
通过正确配置 Hibernate 的日志级别,可以在 Spring Boot 3 项目中轻松地记录 JPA 查询中的 SQL 参数绑定信息。这对于调试和优化数据库操作非常有帮助。请记住,trace 级别的日志输出非常详细,应谨慎使用,并根据实际情况调整日志级别。
以上就是使用 Spring Boot 3 记录 JPA 查询中的 SQL 参数绑定的详细内容,更多请关注知识资源分享宝库其它相关文章!







发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。