java如何查看sql
查看 SQL 语句的方法
使用日志框架打印 SQL
启用 Hibernate 或 MyBatis 的 SQL 日志功能,可以在控制台查看执行的 SQL 语句。
Hibernate(JPA)配置
在 application.properties 或 application.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.properties 或 mybatis-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:

@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 语句。






