JPQL查詢和SQL語言的學習筆記數據庫
一. JPQL編程
1. 什麼是JPQL?數據結構
在 Java EE 中,JPQL就是一種查詢語言,具備與SQL 相相似的特徵,JPQL是徹底面向對象的,具有繼承、多態和關聯等特性,和hibernate的HQL很類似。編程語言
JPQL( Java 持久性查詢語言)是專門爲Java 應用程序訪問和導航實體實例設計的。JPQL是EJB2使用的查詢語言EJB QL的擴展,它繼承了EJB QL並對其作了函數
一些改變。學習
2. 使用spa
JPQL 語句支持兩種方式的參數定義方式 : 命名參數和位置參數 。在同一個查詢語句中只容許使用一種參數定義方式。.net
JPQL語言的語句能夠是 select 語句、update 語句或delete語句,它們都經過 Query 接口封裝執行。hibernate
Query接口封裝了執行數據庫查詢的相關方法。調用 EntityManager 的 createQuery、create NamedQuery 及 createNativeQuery 方法能夠得到查詢對象,進設計
而可調用 Query 接口的相關方法來執行查詢操做。
步驟以下:
要從 Java 代碼內發出 JPQL 查詢,您須要利用 EntityManager API 和 Query API 的相應方法,執行如下通常步驟:
1. 使用注入或經過 EntityManagerFactory 實例獲取一個 EntityManager 實例。
2. 經過調用相應 EntityManager 的方法(如 createQuery),建立一個 Query 實例。
3. 若是有查詢參數,使用相應 Query 的 setParameter 方法進行設置。
4. 若是須要,使用 setMaxResults 和/或 setFirstResult Query 的方法設置要檢索的實例的最大數量和/或指定檢索的起始實例位置。
5. 若是須要,使用 setHint Query 的方法設置供應商特定的提示。
6. 若是須要,使用 setFlushMode Query 的方法設置查詢執行的刷新模式,覆蓋實體管理器的刷新模式。
7. 使用相應 Query 的方法 getSingleResult 或 getResultList 執行查詢。若是進行更新或刪除操做,您必須使用 executeUpdate 方法,它返回已更新或刪除的實體實例的數量。
JPQL的查詢能夠分爲命名查詢和動態查詢。
動態查詢
可使用EntityManager.createQuery方法建立動態查詢,惟一的要求是把合法的JPQL語句傳遞給此方法。以下:
Query query = em.createQuery(「select p from Person p where p.id=1033」);
其中where語句但是可選的。在這裏JPQL看上去和SQL語句很像,但應當注意到的是from後邊的Person是實體Bean而不是數據表。
在所寫的JPQL語句中你能夠像示例中那樣的直接將查詢條件寫在語句中。可是還有更好的方法。在這裏你可使用設置查詢參數的方式,其中又有位置參數和命名參數的分別。
使用位置參數以下所示:
Query query = em.createQuery(「select p from Person p where p.id=?1」);
Query.setParameter(1, 1033);//第一個參數是位置,第二個參數查詢條件
使用命名參數以下所示:
Query query = em.createQuery(「select p from Person p where p.id=:id」);
Query.setParameter(「id」, 1033);//第一個參數是參數名稱,第二個參數查詢條件
須要注意的是位置參數的是位置前加符號」?」,命名參數是名稱前是加符號」:」。
二. SQL
1. 什麼是SQL?
結構化查詢語言是高級的非過程化編程語言,容許用戶在高層數據結構求用戶指定對數據的存放方法,也不須要用戶瞭解具體的數據存放方式,因此具備徹底不一樣底層結構的不一樣數據庫系統, 可使用相同的結構化查詢語言做爲數據輸入與管理的接口。結構化查詢語言語句能夠嵌套,這使它具備極大的靈活性和強大的功能。
2. 構成
結構化查詢語言包含6個部分: