JPA中的查询语句可以通过以下方式进行定义和执行:
- JPQL查询:通过Java Persistence Query Language定义查询。在EntityManager上使用createQuery()执行。
TypedQuery<User> query = em.createQuery("SELECT u FROM User u", User.class);
List<User> users = query.getResultList();
- 本地SQL查询:在实体类上使用@NamedNativeQuery注解定义本地SQL查询。使用createNativeQuery()执行。
@NamedNativeQuery(name = "User.findBySQL",
query = "SELECT * FROM USER WHERE agE>?" ,
resultClass = User.class)
public class User { ... }
Query query = em.createNativeQuery("User.findBySQL", User.class);
query.setParameter(1, 10);
List<User> users = query.getResultList();
- 存储过程:使用@NamedStoredProcedureQuery注解在实体上定义存储过程。使用createNamedStoredProcedureQuery()执行。
@NamedStoredProcedureQuery(
name="User.delete",
procedureName="delete_user_sp",
parameters = {
@StoredProcedureParameter(name = "username", queryParameter = "name")
}
)
public class User { ... }
StoredProcedureQuery query =
em.createNamedStoredProcedureQuery("User.delete");
query.setParameter("name", "John");
query.execute();
- 轻量级查询:直接在EntityManager上使用createQuery()或createNativeQuery()构建并立即执行查询。
List<User> users = em.createQuery("SELECT u FROM User u")
.setParameter(1, 10)
.getResultList();