Rumah > Java > javaTutorial > teks badan

Bagaimana untuk menggunakan anotasi @Query untuk pertanyaan tersuai dalam Hibernate?

王林
Lepaskan: 2024-04-17 11:09:01
asal
597 orang telah melayarinya

Bagaimana untuk menggunakan anotasi @Query untuk pertanyaan tersuai dalam Hibernate? Anotasi @Query Hibernate membolehkan kami melakukan pertanyaan tersuai menggunakan JPQL atau SQL. Pertanyaan JPQL: Tambahkan anotasi @Query pada kaedah kelas entiti. Tentukan rentetan pertanyaan JPQL. Pertanyaan SQL: Gunakan anotasi @NamedNativeQuery untuk menentukan pertanyaan asli bernama. Tentukan pernyataan pertanyaan dan kelas hasil. Contoh praktikal: Kita boleh mencari pekerja di jabatan tertentu menggunakan pertanyaan berikut: @Query("SELECT e FROM Employee e WHERE e.department = :department") Senaraikan findEmployeesInDepartment(@Param("department") String department);

如何在 Hibernate 中使用 @Query 注解进行自定义查询?

Cara menggunakan anotasi @Query dalam Hibernate untuk pertanyaan tersuai

Pengenalan >Hibernate@'kod kami untuk menentukan pertanyaan JPQL atau SQL tersuai pada kelas entiti. Ia menyediakan cara yang mudah untuk melaksanakan pertanyaan yang lebih maju tanpa menulis kod SQL peringkat rendah.

@Query 注解允许我们在实体类上定义自定义 JPQL 或 SQL 查询。它提供了一个方便的方式来执行更高级的查询,而无需编写低级别 SQL 代码。

JPQL 查询

要使用 JPQL(Java 持久化查询语言),需要在实体类方法上添加 @Query 注解,并指定 JPQL 查询字符串。例如:

@Query("SELECT e FROM Employee e WHERE e.salary > 50000")
List<Employee> findEmployeesWithSalaryGreaterThan50000();
Salin selepas log masuk

这段代码定义了一个查询,它返回所有薪水大于 50,000 的员工。

SQL 查询

要使用原生 SQL 查询,可以使用 @NamedNativeQuery 注解。@NamedNativeQueries 允许我们定义多个命名的原生查询。例如:

@NamedNativeQueries({
    @NamedNativeQuery(
        name = "findEmployeesWithSalaryGreaterThan50000",
        query = "SELECT * FROM Employee WHERE salary > 50000",
        resultClass = Employee.class
    )
})
Salin selepas log masuk

这段代码定义了一个名为 "findEmployeesWithSalaryGreaterThan50000" 的原生 SQL 查询,它返回所有薪水大于 50,000 的员工。

实战案例

考虑这样的实体类:

@Entity
public class Employee {
    @Id
    private Long id;
    private String name;
    private double salary;
    //省略 getter 和 setter
}
Salin selepas log masuk

我们可以使用 @Query 注解来查找特定部门中的所有员工:

@Query("SELECT e FROM Employee e WHERE e.department = :department")
List<Employee> findEmployeesInDepartment(@Param("department") String department);
Salin selepas log masuk

现在,我们可以使用 findEmployeesInDepartment 方法来获取特定部门中的所有员工,如下所示:

List<Employee> employees = employeeRepository.findEmployeesInDepartment("Engineering");
Salin selepas log masuk

结论

@QueryJPQL Query

🎜Untuk menggunakan JPQL (Java Persistence Query Language), anda perlu menambah anotasi @Query pada kaedah kelas entiti dan nyatakan rentetan pertanyaan JPQL. Contohnya: 🎜rrreee🎜Kod ini mentakrifkan pertanyaan yang mengembalikan semua pekerja yang gajinya melebihi 50,000. 🎜🎜Pertanyaan SQL🎜🎜Untuk menggunakan pertanyaan SQL asli, anda boleh menggunakan anotasi @NamedNativeQuery. @NamedNativeQueries membolehkan kami mentakrifkan berbilang pertanyaan asli bernama. Contohnya: 🎜rrreee🎜Kod ini mentakrifkan pertanyaan SQL asli yang dipanggil "findEmployeesWithSalaryGreaterThan50000" yang mengembalikan semua pekerja yang gajinya melebihi 50,000. 🎜🎜Kes Praktikal🎜🎜Pertimbangkan kelas entiti ini: 🎜rrreee🎜Kita boleh menggunakan anotasi @Query untuk mencari semua pekerja dalam jabatan tertentu: 🎜rrreee🎜Kini, kita boleh menggunakan findEmployeesInDepartment kaedah /code> untuk mendapatkan semua pekerja dalam jabatan tertentu seperti yang ditunjukkan di bawah: 🎜rrreee🎜Kesimpulan🎜🎜<code>@Query Anotasi ialah alat berkuasa dalam Hibernate yang membolehkan kami melakukan pertanyaan tersuai. Kita boleh menulis pertanyaan menggunakan JPQL atau SQL asli dan menggunakan parameter bernama untuk menghantar parameter pertanyaan secara dinamik. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menggunakan anotasi @Query untuk pertanyaan tersuai dalam Hibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan