JPA中如何使用本地查询?

在JPA中可以通过使用@Query注解定义本地SQL查询语句。这种方式称为本地查询。
@Query注解用于在实体类或Repository接口上定义基于SQL的查询语句。
语法:

@Query("SQL_SELECT_STATEMENT") 

示例:

@Entity
public class User {
    @Query("SELECT * FROM USERS WHERE NAME = ?1 AND AGE > ?2")
    List<User> findUserByParams(String name, int age);
}

调用本地查询:

List<User> users = user.findUserByParams("John", 30); 

其中:

  • 方法的参数会自动映射到SQL查询中的位置参数。
  • 方法的返回类型必须是查询结果类型或其子类型。
    我们也可以在Repository接口上定义本地查询:
public interface UserRepository {
    @Query("SELECT * FROM USERS WHERE NAME = ?1") 
    List<User> findByName(String name);
}

调用:

List<User> users = userRepository.findByName("John"); 

本地查询的优点:

  1. 支持原生SQL,可以使用数据库特有的功能。
  2. 性能更好,不需要通过EntityManager进行对象-关系映射。
  3. 可移植性更差,SQL语句依赖于特定数据库。

示例:

@Entity 
public class User {

    @Query("SELECT * FROM USERS WHERE NAME = ?1")
    List<User> findByName(String name);

    @Query("SELECT * FROM USERS WHERE AGE > ?1") 
    List<User> findByAge(int age);
}