-
通过配置文件设置日志级别:修改
application.properties
或application.yml
文件,将logging.level.org.hibernate.SQL
设置为DEBUG
。
logging.level.org.hibernate.SQL=DEBUG
或
logging:
level:
org.hibernate.SQL: DEBUG
-
通过Logger对象设置日志级别:在需要打印SQL语句的类中,使用Logger对象设置日志级别为
DEBUG
。示例:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
public void myMethod() {
// 设置日志级别为DEBUG
logger.debug("org.hibernate.SQL");
// 执行JPA操作
// ...
}
}
-
使用Spring Boot的自动配置属性:在
application.properties
或application.yml
文件中设置以下属性:
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
或
spring:
jpa:
show-sql: true
properties:
hibernate:
format_sql: true
- 通过EntityManagerFactory设置属性:获取EntityManagerFactory对象,并设置相应的属性。
import javax.persistence.EntityManagerFactory;
import org.hibernate.SessionFactory;
public class MyClass {
private EntityManagerFactory entityManagerFactory;
public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory;
// 获取SessionFactory对象,并设置属性
SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
sessionFactory.getProperties().setProperty("hibernate.show_sql", "true");
}
}
-
使用
persistence.xml
配置文件:在persistence.xml
文件中添加以下属性:
<properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
-
通过自定义Interceptor拦截器:创建一个类实现
org.hibernate.Interceptor
接口,并重写onPrepareStatement()
方法,在该方法中打印SQL语句。
import org.hibernate.EmptyInterceptor;
public class CustomInterceptor extends EmptyInterceptor {
@Override
public String onPrepareStatement(String sql) {
System.out.println(sql); // 打印SQL语句
return super.onPrepareStatement(sql);
}
}
然后在JPA配置中指定使用此拦截器。
使用日志框架的AOP功能:通过使用日志框架(如Log4j或Logback)的AOP功能,针对执行JPA操作的方法进行切面处理,在切面中打印出SQL语句。
使用Spring Data JPA提供的查询方法名称:在Repository接口中定义查询方法,并在启动时设置日志级别为
DEBUG
,Spring Data JPA会自动打印出查询SQL语句。使用Query注解:在自定义的查询方法上使用
@Query
注解,并设置nativeQuery=true
,可在控制台输出原生SQL语句。示例:
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM users", nativeQuery = true)
List<User> findAllUsers();
}
-
使用Spring Boot Actuator端点:在
application.properties
或application.yml
文件中启用Actuator的/actuator/mappings
端点,并访问此端点查看映射信息,其中包含了SQL语句。示例:
management.endpoints.web.exposure.include=mappings
或
management:
endpoints:
web:
exposure:
include: mappings