jpa 如何执行原生sql

2023-07-03  本文已影响0人  饱饱想要的灵感

在JPA中,执行原生SQL查询有以下几种方法:

注意: EntityManager要用@PersistenceContext来注入。

  1. 使用createNativeQuery()方法:可以使用该方法创建原生SQL查询对象,并使用getResultList()getSingleResult()方法来获取查询结果。
String sql = "SELECT * FROM users WHERE username = :username";
Query query = entityManager.createNativeQuery(sql);
query.setParameter("username", "admin");
List<Object[]> results = query.getResultList();
  1. 使用@NativeQuery注解:可以在实体类的Repository接口中使用@NativeQuery注解来定义原生SQL查询。
@Repository
public interface UserRepository extends JpaRepository<User, Long> {

  @Query(nativeQuery = true, value = "SELECT * FROM users WHERE username = :username")
  User findByUsernameNative(@Param("username") String username);

}
  1. 使用EntityManager的createNativeNamedQuery()方法:可以使用该方法创建对应的命名查询,然后使用getResultList()getSingleResult()方法来获取查询结果。
StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("procedure_name");
storedProcedure.registerStoredProcedureParameter("param_name", String.class, ParameterMode.IN);
storedProcedure.setParameter("param_name", param_value);
storedProcedure.execute();
  1. 使用EntityManager的createStoredProcedureQuery()方法:可以使用该方法创建存储过程查询对象,并使用setParameter()方法来设置参数,然后使用execute()方法来执行存储过程。
StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("procedure_name");
storedProcedure.registerStoredProcedureParameter("param_name", String.class, ParameterMode.IN);
storedProcedure.setParameter("param_name", param_value);
storedProcedure.execute();



需要注意的是,执行原生SQL查询可能存在SQL注入的风险,应该避免直接拼接用户输入的内容到SQL语句中。可以使用参数化查询来防止SQL注入。

此外,执行原生SQL查询与JPA中的实体对象不直接关联,所以查询结果将返回Object数组或原生SQL查询所返回的结果对象。

上一篇 下一篇

猜你喜欢

热点阅读