十二 JPQL高階查詢

2021-07-31 08:22:18 字數 1761 閱讀 3893

一.

criteria查詢:編譯期發現錯誤

select u from user u where u.old>20

//拼裝其工廠

criteriabuilder cb=entitymanager.getcriteriabuider();

//拼裝器

criteriaquery cq=cb.createquery();

rootroot=cq.from(user.class);

cq.select(root);

//條件

predicate pre =cb.greaterthan(root.get("old").as(integer.class),20);

/* predicate pre =cb.greaterthan(root.get("old").as(integer.class), cb.parameter(integer.class,"old");*/

cq.where(pre);

//傳進去

query query=entitymanager.createquery(cq);

/*query.setparameter("old",20);*/

listusers=query.getresultlist();

return users;

查詢屬性:cq.multiselect(root.get("old"),root.get("name"));

注意返回值:list若想返回依舊是實體:不要multiselect

cq.select(cb.construct(user.class,root.get("old"),root.get("name")));

懶載入:語句放在root root = cq.from(user.class);後。

fetch rootfetch = root.fetch(「interests」);

若連線:語句放在root root = cq.from(user.class);後。

root.join(「interests」,jointype.left);

排序:放在where後

cq.orderby(cb.desc(root.get(「old」)),cb.asc(root.get(「worktime」)));

若條件有多個,則cq.where(pre,pre1);

若要條件與或非:條件後

cq.and(pre,pre1)

cq.or(pre,pre1)

cq.where(cq.or(pre,pre1));

@query和@namedquery

dao層方法:

@query(value="select u from user u where u.name like :name")

public listfinduserbyname(@param("name")string name);

若原生態,要在sql語句後nativequery=true

@namedquery:bean管理器

model bean:user

@namedqueries()

dao層呼叫:注入bean管理器後

@transactional

public listfindall()

JPA中JPQL的子查詢

jpa中jpql的子查詢 示例 1.employee實體類 entity public class employee public void setempid integer empid public string getempaddress public void setempaddress st...

MySQL高階(十二) 全域性查詢日誌

前言 全域性查詢日誌用於儲存所有的sql執行記錄,該功能主要用於測試環境,在生產環境中永遠不要開啟該功能。1.通過my.cnf配置開啟該功能。注 對my.cnf檔案配置後,需重啟mysql。通過命令檢視全域性查詢日誌是否開啟成功。檢視全log globalquery.log檔案中的內容。該log檔案...

Hive總結(十二)Hive查詢高階

通過hive提供的order by子句可以讓最終的輸出結果整體有序。但是因為hive是基於hadoop之上的,要生成這種整體有序的結果,就必須強迫hadoop只利用乙個reduce來完成處理。這種方式的 就是回降低效率。如果你不需要最終結果整體有序,你就可以使用sort by子句來進行排序。這種排序...