在使用spring jpa提供的方法只能進行簡單的crud,如果遇到複雜的情況就需要我們動態來構建查詢條件了。這裡我們來看使用criteriabuilder如何來構造查詢。
核心**:
criteriabuilder criteriabuilder = entitymanager.getcriteriabuilder();
criteriaquery query = criteriabuilder.createquery(long.class);
root root = query.from(order.class);
query.select(criteriabuilder.count(root.get("id")));
predicate predicate = criteriabuilder.equal(root.get("id"), 1);
query.where(predicate);
long singleresult = entitymanager.createquery(query).getsingleresult();
呼叫entitymanager.getcriteriabuilder()來獲取criteriabuilder。criteriabuilder可以用於建立criteriaquery、criteriaupdate和criteriadelete。除此之外類似count、max等函式也是由criteriabuilder來建立的。其中en[email protected]�
[email protected]reatequery的引數是query返回值型別。
呼叫query.from(order.class)。引數是對應於order表的實體類,query.from類似於sql中的from語句,該方法的執行等價於sql中的from order。
呼叫 query.select建立對映。 query.select(criteriabuilder.count(root.get(「id」)))等價於select count(id)。如果執行query.select(root)則等價於select *。
使用criteriabuilder構造查詢條件predicate,該predicate也就是在where後面的條件子句。
將predicate放在 query.where中。
最後執行查詢獲取資料。
原文:
JPA動態拼接where條件
在開發中,經常會涉及到動態拼接sql,以下就是jpa拼接條件案例 兩種方法大同小異,只不過語法方面不同 mysql 使用三元運算子的方式 query value select from user a where if 1 id 1 1 1 nativequery true public listfi...
JPA如何優雅的拼接動態查詢條件
由於之前開發持久層使用者都是mybatis,所以體會不了jpa動態拼接查詢條件的痛楚。query select c from customer c where name is null or c.name name and email is null or c.email email listfin...
jpa 動態sql 部分更新表字段
transactional modifying clearautomatically true query value update info p set p.status 1 where p.id 2 nativequery true int updatestatusbyid string sta...