jpa 動態sql拼接 JPA的動態查詢拼接

2021-10-16 23:34:13 字數 1147 閱讀 3507

在使用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...