JPA查詢
1.查詢所有信息Query q = em.createQuery("select u from Userinfo u");
List list =q.getResultList();
如果查詢結果是多個,應該使用Query接口的getResultList方法,如果查詢結果只有一個,可以使用Query接口的getSingleResult方法。
命名查詢:
@NamedQuery(name = "findAllUser", query = "SELECT u FROM Userinfo u")
name表示該查詢的名字,query是查詢語句本身。命名查詢可以寫在實體類中,第一次課生成的實體類中就有多個命名查詢。
對于命名查詢可以使用EntityManager的createNamedQuery方法,要訪問上面的查詢可以使用下面的代碼:
Query q = em.createNamedQuery("findAllUser");
List<Userinfo> list =q.getResultList();
createNamedQuery方法的參數命名查詢的名字。
2.使用Query完成分頁
分頁顯示就是每次只顯示部分對象的信息。要顯示哪一部分信息取決于從什么地方開始顯示,顯示到什么地方。Query接口可以控制要獲取的記錄,有兩個方法來設置要獲取的第一條記錄和最后一條記錄。兩個方法的定義分別如下:
setMaxResults(int maxResult),參數是要查詢的最大記錄數。
setFirstResult(int startposition),參數是第一個要查詢的記錄的位置。
通過這兩個屬性完成分頁顯示。
注意:分頁必須用apache-openjpa-1.0.2-binary.zip , 1.0.1不起作用是個Bug
3.條件查詢
條件查詢,需要在查詢語句中使用變量,可以有兩種方式:位置參數和名字參數。
位置參數
在位置參數中,使用“?”號加上參數的序號的方式表示參數。
例,根據用戶名username查詢用戶。
SELECT u FROM Userinfo u where u.username = ?1
1表示第一個參數。
在位置參數中,可以使用多個參數,可以用不同的數字表示。同一個參數可以在查詢中出現多次。
名字參數
在名字參數種,使用“:”號加上參數的名字的方式表示參數。
例,根據用戶類型查詢用戶。
SELECT u FROM Userinfo u WHERE u.usertype = :usertype
“:”號后面的usertype就是參數的名字。
不管是位置參數還是名字參數都可以在命名查詢中使用。
位置參數的賦值通過Query接口的相應方法完成,主要方法如下:
public Query setParameter(int position,Object value)
public Query setParameter(int position,Date value,TemporalType temporalType)
public Query setParameter(int position,Calendar value,TemporalType temporalType)
用于名字參數的賦值方法基本相同,只是第一個參數用于指定參數的名字。主要方法如下:
public Query setParameter(String name,Object value)
public Query setParameter(String name,Date value,TemporalType temporalType)
public Query setParameter(String name,Calendar value,TemporalType temporalType)
例1:使用前面介紹的根據用戶名進行查詢的語句。
Query q = em.createQuery("SELECT u FROM Userinfo u where u.username = ?1");
q = q.setParameter(1,username);
List<Userinfo> list =q.getResultList();
例2:使用前面介紹的根據用戶類型進行查詢的語句。
Query q = em.createQuery("SELECT u FROM Userinfo u WHERE u.usertype = :usertype");
q = q.setParameter("usertype",usertype);
List<Userinfo> list =q.getResultList();
Query接口的方法參考書上370頁Query接口部分。關于EntityManager接口的方法參考書上358頁EntityManager接口部分。
posted on 2008-03-20 01:50 gembin 閱讀(2595) 評論(0) 編輯 收藏 所屬分類: JavaEE