JPA的JPQL(Java Persistence Query Language)語法可類似SQL,但其查詢資料源是持久化物件(Entity)而非資料庫本身。
例如有一個對映資料表EMPLOYEE
,在Java程式中對映的實體為Employee
如下。
@Entity
@Table(name="EMPLOYEE")
public class Employee {
@Id
@Column(name="ID")
private int id;
@Column(name="NAME")
private String name;
@Column(name="EMAIL", unique=true)
private String email;
// getter and setter ommitted
}
查詢全部。因為Entity的名稱預設為實體的類別名稱,所以查詢的是Employee
而不是EMPLOYEE
。
EntityManager em = Persistence.createEntityManagerFactory("mydb").createEntityManager();
String jpql = "SELECT e FROM Employee e";
Query query = em.createQuery(jpql, Employee.class);
List<Employee> employeeList = query.getResultList();
查詢WHERE
條件。後面的:email
是插入參數的位置,可以任意命名。所以下面的query.setParameter("email", email);
會將email變數插入在:email
的位置
EntityManager em = Persistence.createEntityManagerFactory("mydb").createEntityManager();
String jpql = "SELECT e FROM Employee e WHERE e.email = :email";
Query query = em.createQuery(jpql, Employee.class);
query.setParameter("email", email);
List<Employee> employeeList = query.getResultList();
查詢WHERE...AND...
。
EntityManager em = Persistence.createEntityManagerFactory("mydb").createEntityManager();
String jpql = "SELECT e FROM Employee e WHERE e.email = :arg1 AND e.name = :arg2";
Query query = em.createQuery(jpql, Employee.class);
query.setParameter("arg1", email);
query.setParameter("arg2", name);
List<Employee> employeeList = query.getResultList();
查詢LIKE
條件
EntityManager em = Persistence.createEntityManagerFactory("mydb").createEntityManager();
String jpql = "SELECT e FROM Employee e WHERE e.name LIKE :arg1";
Query query = em.createQuery(jpql, Employee.class);
query.setParameter("arg1", "%" + name + "%"); // e.g. %matt%
List<Employee> employeeList = query.getResultList();
IS NULL
EntityManager em = Persistence.createEntityManagerFactory("mydb").createEntityManager();
String jpql = "SELECT e FROM Employee e WHERE e.name IS NULL";
Query query = em.createQuery(jpql, Employee.class);
List<Employee> employeeList = query.getResultList();
參考:
沒有留言:
張貼留言