1. 程式人生 > >JPA學習筆記(12)——JPQL

JPA學習筆記(12)——JPQL

                       

Query介面

int executeUpdate()

用於執行update或delete語句。

List getResultList()

用於執行select語句並返回結果集實體列表。

Object getSingleResult()

3用於執行只返回單個結果實體的select語句。

Query setFirstResult(int startPosition)

用於設定從哪個實體記錄開始返回查詢結果。

Query setMaxResults(int maxResult)

用於設定返回結果實體的最大數。與setFirstResult結合使用可實現分頁查詢。

Query setFlushMode(FlushModeType flushMode)

設定查詢物件的Flush模式。

引數可以取2個列舉值:

  1. FlushModeType.AUTO 為自動更新資料庫記錄

  2. FlushMode Type.COMMIT 為直到提交事務時才更新資料庫記錄。

setHint(String hintName, Object value)

設定與查詢物件相關的特定供應商引數或提示資訊。引數名及其取值需要參考特定 JPA 實現庫提供商的文件。如果第二個引數無效將丟擲IllegalArgumentException異常。

setParameter(int position, Object value)

為查詢語句的指定位置引數賦值。Position 指定引數序號,value 為賦給引數的值。

setParameter(int position, Date d, TemporalType type)

為查詢語句的指定位置引數賦 Date 值。Position 指定引數序號,value 為賦給引數的值,temporalType 取 TemporalType 的列舉常量,包括 DATE、TIME 及 TIMESTAMP 三個,,用於將 Java 的 Date 型值臨時轉換為資料庫支援的日期時間型別(java.sql.Date、java.sql.Time及java.sql.Timestamp)。

setParameter(int position, Calendar c, TemporalType type)

為查詢語句的指定位置引數賦 Calenda r值。position 指定引數序號,value 為賦給引數的值,temporalType 的含義及取捨同前。

setParameter(String name, Object value)

為查詢語句的指定名稱引數賦值。

setParameter(String name, Date d, TemporalType type)

為查詢語句的指定名稱引數賦 Date 值。用法同前。

setParameter(String name, Calendar c, TemporalType type)

為查詢語句的指定名稱引數設定Calendar值。name為引數名,其它同前。該方法呼叫時如果引數位置或引數名不正確,或者所賦的引數值型別不匹配,將丟擲 IllegalArgumentException 異常。

注意:在jpql中,如果是查詢結果是物件,那麼from關鍵字後面跟類名,如果查詢結果是一個欄位,那麼要使用表名
例如:(User類對應t_user表)
查詢物件:“from User where id = ?”
查詢某個欄位:”select u.NAME from t_user where u.ID = ?”

createQuery

String jpql = "FROM User u WHERE u.id = ?";Query query = entityManager.createQuery(jpql);query.setParameter(1, 1);//第一個引數是佔位符的位置,從1開始,第二個引數是要傳入的引數User user = (User) query.getSingleResult();System.out.println(user);
   
  • 1
  • 2
  • 3
  • 4
  • 5

查詢部分屬性:

//獲取部分屬性String jpql1 = "SELECT u.id,u.name FROM User u where u.id > ?";List result = entityManager.createQuery(jpql1).setParameter(1, 1).getResultList();System.out.println(result);
   
  • 1
  • 2
  • 3
  • 4

結果:
這裡寫圖片描述

預設情況下,如果只查詢部分屬性,則返回Object[] 型別的結果,或者Object[] 型別的List

如果希望返回的是物件,可以這樣寫:

  1. 在實體類中建立對應的構造器
  2. 在JPQL語句中,利用構造器返回實體類的物件
public User (){}public User(Integer id,String name){    this.id = id;    this.name = name;}
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
//獲取部分屬性String jpql1 = "SELECT new User(u.id,u.name) FROM User u where u.id > ?";List result = entityManager.createQuery(jpql1).setParameter(1, 1).getResultList();System.out.println(result);
   
  • 1
  • 2
  • 3
  • 4

結果:
這裡寫圖片描述

createNamedQuery

適用於實體類前適用@NamedQuery標記的查詢語句
User

@NamedQuery(name="userQuery",query="from User u where u.id = ?")@Table(name="T_USER")@Entitypublic class User 
   
  • 1
  • 2
  • 3
  • 4

查詢

User user = (User) entityManager.createNamedQuery("userQuery").setParameter(1, 1).getSingleResult(); System.out.println(user);
   
  • 1
  • 2

createNativeQuery

適用於本地SQL

String jpql = "SELECT u.NAME FROM t_user u where u.id = ?";Query query = entityManager.createNativeQuery(jpql).setParameter(1, 1);Object result = query.getSingleResult();System.out.println(result);
   
  • 1
  • 2
  • 3
  • 4
           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow