0

0

使用 Spring Boot 3 记录 JPA 查询中的 SQL 参数绑定

心靈之曲

心靈之曲

发布时间:2025-08-30 23:23:01

|

722人浏览过

|

来源于php中文网

原创

使用 spring boot 3 记录 jpa 查询中的 sql 参数绑定

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:

MyBatis3.2.3帮助文档 中文CHM版
MyBatis3.2.3帮助文档 中文CHM版

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记录。有需要的朋友可以下载看看

下载
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository {
}

在 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 级别的日志输出非常详细,应谨慎使用,并根据实际情况调整日志级别。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

676

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1094

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

675

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

571

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

414

2024.04.29

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

9

2026.01.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号