Maison  >  Article  >  Java  >  Comment utiliser l'annotation @Query pour une requête personnalisée dans Hibernate ?

Comment utiliser l'annotation @Query pour une requête personnalisée dans Hibernate ?

王林
王林original
2024-04-17 11:09:01598parcourir

Comment utiliser l'annotation @Query pour une requête personnalisée dans Hibernate ? L'annotation @Query d'Hibernate nous permet d'effectuer des requêtes personnalisées en utilisant JPQL ou SQL. Requête JPQL : ajoutez une annotation @Query sur les méthodes de classe d'entité. Spécifiez la chaîne de requête JPQL. Requêtes SQL : utilisez l'annotation @NamedNativeQuery pour définir des requêtes natives nommées. Spécifiez l'instruction de requête et la classe de résultats. Exemple pratique : Nous pouvons rechercher des employés dans un service spécifique à l'aide de la requête suivante : @Query("SELECT e FROM Employee e WHERE e.department = :department") Lista7c15504e26c2dc9d33fa17ec3230b5f findEmployeesInDepartment (@Param("department") String Department);

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

Comment utiliser l'annotation @Query dans Hibernate pour une requête personnalisée

Introduction

Les annotations @Query d'Hibernate autorisent nous pour définir des requêtes JPQL ou SQL personnalisées sur les classes d'entités. Il constitue un moyen pratique d'effectuer des requêtes plus avancées sans écrire de code SQL de bas niveau. @Query 注解允许我们在实体类上定义自定义 JPQL 或 SQL 查询。它提供了一个方便的方式来执行更高级的查询,而无需编写低级别 SQL 代码。

JPQL 查询

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

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

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

SQL 查询

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

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

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

实战案例

考虑这样的实体类:

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

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

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

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

List<Employee> employees = employeeRepository.findEmployeesInDepartment("Engineering");

结论

@Query

Requête JPQL🎜🎜Pour utiliser JPQL (Java Persistence Query Language), vous devez ajouter l'annotation @Query à la méthode de classe d'entité et spécifier la chaîne de requête JPQL. Par exemple : 🎜rrreee🎜Ce code définit une requête qui renvoie tous les employés dont le salaire est supérieur à 50 000. 🎜🎜Requête SQL🎜🎜Pour utiliser une requête SQL native, vous pouvez utiliser l'annotation @NamedNativeQuery. @NamedNativeQueries nous permet de définir plusieurs requêtes natives nommées. Par exemple : 🎜rrreee🎜Ce code définit une requête SQL native appelée "findEmployeesWithSalaryGreaterThan50000" qui renvoie tous les employés dont le salaire est supérieur à 50 000. 🎜🎜Cas pratique🎜🎜Considérez cette classe d'entité : 🎜rrreee🎜Nous pouvons utiliser l'annotation @Query pour rechercher tous les employés d'un service spécifique : 🎜rrreee🎜Maintenant, nous pouvons utiliser findEmployeesInDepartment pour obtenir tous les employés d'un service spécifique, comme indiqué ci-dessous : 🎜rrreee🎜Conclusion🎜🎜<code>@Query Les annotations sont un outil puissant dans Hibernate qui nous permet d'effectuer des requêtes personnalisées. Nous pouvons écrire des requêtes en utilisant JPQL ou SQL natif et utiliser des paramètres nommés pour transmettre dynamiquement les paramètres de requête. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn