|
|
您可以將一些靜態的JPQL或SQL語句建立在同一個位置,這些靜態語句會有幾個參數有所不同,但基本上語句結構是相同的,避免將JPQL或SQL建立在程式中不同的位置,而造成日後修改時必須查看程式碼的麻煩。 在JPA中,可以使用@NamedQuery來建立Named Query,例如在 第一個 JPA(單機客戶端) 中,可以在User類別上建立Named Query: ....
@NamedQuery( name="QueryUserById", query="SELECT user FROM User user WHERE user.id = :userId" ) @Entity @Table(name="T_USER") public class User implements Serializable { ... } 在建立Query物件時,可以使用NamedQuery的name屬性取得NamedQuery: Query query = entityManager.createNamedQuery("QueryUserById"); query.setParameter("userId", id); User user = (User) query.getSingleResult(); 如果有多個NamedQuery要宣告,可以使用@NamedQueies來宣告,例如: ....
@NamedQueries ({ @NamedQuery( name="QueryUserById", query="SELECT user FROM User user WHERE user.id = :userId"), @NamedQuery( name="UpdateUserById", query="UPDATE User user SET user.age = :userAge WHERE user.id = :userId" ) }) @Entity @Table(name="T_USER") public class User implements Serializable { ... } 您可以使用Query物件的createNativeQuery()方法建立原生查詢(Native Query),也就是直接使用資料庫的SQL語法來進行查詢,對於無法使用JPQL查詢來取得資料時可以使用,例如: Query query = entityManager.createNativeQuery( "SELECT * FROM T_USER", User.class); Iterator iterator = query.getResultList().iterator(); while(iterator.hasNext()) { User user = (User) iterator.next(); System.out.println(user.getName()); } |