当前位置:首页 > Java

java如何查看sql

2026-03-22 22:11:00Java

查看 SQL 语句的方法

使用日志框架打印 SQL

启用 Hibernate 或 MyBatis 的 SQL 日志功能,可以在控制台查看执行的 SQL 语句。

Hibernate(JPA)配置
application.propertiesapplication.yml 中设置:

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

MyBatis 配置
application.propertiesmybatis-config.xml 中启用日志:

logging.level.你的Mapper包路径=DEBUG

使用数据库代理工具

数据库代理工具(如 P6Spy)可以拦截 JDBC 调用并打印 SQL:

添加 P6Spy 依赖

<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.9.1</version>
</dependency>

配置 spy.properties
resources 目录下创建 spy.properties,配置:

module.log=com.p6spy.engine.logging.P6LogFactory
appender=com.p6spy.engine.spy.appender.Slf4JLogger
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(currentTime) | %(executionTime) | %(category) | connection %(connectionId) | %(sqlSingleLine)

使用数据库监控工具

数据库管理工具(如 MySQL Workbench、DBeaver)提供查询日志功能,可以查看执行的 SQL。

MySQL 查询日志
在 MySQL 配置文件中启用:

general_log = 1
general_log_file = /var/log/mysql/mysql.log

使用代码动态获取 SQL

某些框架(如 JPA Criteria API)支持获取生成的 SQL:

JPA Criteria API 示例

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Entity> query = cb.createQuery(Entity.class);
Root<Entity> root = query.from(Entity.class);
query.select(root).where(cb.equal(root.get("id"), 1));

String sql = entityManager.createQuery(query).unwrap(org.hibernate.query.Query.class).getQueryString();
System.out.println(sql);

MyBatis 拦截器
通过自定义拦截器获取 SQL:

java如何查看sql

@Intercepts({
    @Signature(type= StatementHandler.class, method="query", args={Statement.class, ResultHandler.class})
})
public class SqlInterceptor implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        StatementHandler handler = (StatementHandler) invocation.getTarget();
        BoundSql boundSql = handler.getBoundSql();
        System.out.println("SQL: " + boundSql.getSql());
        return invocation.proceed();
    }
}

以上方法可根据具体框架和需求选择,以便在开发或调试阶段查看 SQL 语句。

标签: javasql
分享给朋友:

相关文章

如何打开java

如何打开java

打开 Java 程序的方法 通过命令行运行 Java 程序 确保已安装 Java Development Kit (JDK) 并配置环境变量。使用 javac 编译 .java 文件,生成 .clas…

java如何上传文件

java如何上传文件

使用HttpURLConnection上传文件 在Java中,可以通过HttpURLConnection实现文件上传功能。需要设置请求头为multipart/form-data,并构建包含文件数据的请…

java如何运行程序

java如何运行程序

运行Java程序的步骤 安装Java开发工具包(JDK) 确保系统已安装JDK,可通过命令行输入java -version和javac -version验证。若未安装,需从Oracle官网下载并配置环…

java如何打印数组

java如何打印数组

打印数组的方法 在Java中,打印数组有多种方式,以下是几种常见的方法: 使用Arrays.toString()方法 这种方法适用于一维数组,可以快速将数组转换为字符串形式输出: int[] a…

java中如何获取当前时间

java中如何获取当前时间

获取当前时间的几种方法 使用 java.time 包(Java 8及以上推荐) import java.time.LocalDateTime; LocalDateTime currentTime =…

如何阅读java源码

如何阅读java源码

阅读Java源码的方法 选择合适的源码项目 初学者建议从JDK核心类库(如java.lang、java.util)或知名开源项目(如Spring、Guava)入手。选择文档完善、社区活跃的项目能降低理…