Spring Data JPA及Hibernate印出查詢SQL的參數的方法如下。。
環境:
- Spring Boot 2.3.2.RELEASE
- H2 Database
- JUnit 5
- Lombok
在application.properties
設定以下。
application.properties
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type=TRACE
logging.level.org.hibernate.type.descriptor.sql=trace
logging.level.org.hibernate.SQL=DEBUG
印出sql語句;
logging.level.org.hibernate.type.descriptor.sql=TRACE
印出sql參數。
下面為Spring Data JPA測試印出log效果。
Entity類Employee
。
Employee
package com.abc.demo.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
public class Employee implements Serializable {
private static final Long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
private Integer age;
private Date createDate;
}
DAO(Data access object)類EmployeeRepository
。
EmployeeRepository
package com.abc.demo.repository;
import com.abc.demo.entity.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
執行測試程式EmployeeRepositoryTests
。
EmployeeRepositoryTests
package com.abc.demo.repository;
import com.abc.demo.entity.Employee;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Date;
@SpringBootTest
class EmployeeRepositoryTests {
@Autowired
private EmployeeRepository employeeRepository;
@Test
void printJpaSqlParameters() {
Employee employee = Employee.builder().name("John")
.email("john@abc.com")
.age(29)
.createDate(new Date())
.build();
employee = employeeRepository.save(employee);
Assertions.assertEquals(employee.getName(), "John");
}
}
console log印出結果如下。
2020-10-23 10:56:07.607 DEBUG 10804 --- [ main] o.h.SQL : insert into employee (id, age, create_date, email, name) values (null, ?, ?, ?, ?)
2020-10-23 10:56:07.612 TRACE 10804 --- [ main] o.h.t.d.s.BasicBinder : binding parameter [1] as [INTEGER] - [29]
2020-10-23 10:56:07.613 TRACE 10804 --- [ main] o.h.t.d.s.BasicBinder : binding parameter [2] as [TIMESTAMP] - [Fri Oct 23 10:56:07 CST 2020]
2020-10-23 10:56:07.621 TRACE 10804 --- [ main] o.h.t.d.s.BasicBinder : binding parameter [3] as [VARCHAR] - [john@abc.com]
2020-10-23 10:56:07.621 TRACE 10804 --- [ main] o.h.t.d.s.BasicBinder : binding parameter [4] as [VARCHAR] - [John]
參考github。
沒有留言:
張貼留言