spring-data-jpa 多條件查詢 學習記錄
spring-data-jpa 是對資料庫訪問的簡化的封裝,可以幫助我們更加方便的實現對資料庫的各種操作。Spring Data JPA 規範方法的名字,根據符合規範的名字來確定方法需要實現什麼樣的邏輯,無需要我們過多關注sql等。一般情況下,對於單表操作非常方便,而涉及到多條件或者多表聯查時相對複雜一些。這裡簡單記錄一下jpa多條件查詢的相關api。
多條件分頁查詢:其中User為查詢條件物件
以上程式碼代表:根據userType及status分頁查詢User表符合條件的記錄。userType,status是User的屬性欄位public Page<User> findByPage(final User user, int page, int pageSize) throws Exception { Sort sort = new Sort(Direction.DESC, "registerTime"); PageRequest pageRequest = new PageRequest(page, pageSize, sort); return userDao.findAll(new Specification<User>(){ @Override public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) { List<Predicate> predicates = new ArrayList<Predicate>(); if(null != user.getUserType()){ predicates.add(builder.equal(root.get("userType"), user.getUserType())); } if(null != user.getStatus()){ predicates.add(builder.equal(root.get("status"), user.getStatus())); } query.where(predicates.toArray(new Predicate[predicates.size()])); return null; } }, pageRequest); }
多表聯查: Question, Grade, Subject
public Page<Question> questionList(final String keyword,final String knowledge,final String type,final String itemBankId,final String gradeId,final String subjectId,Pageable pageable) { Page<Question> question = questionDao.findAll(new Specification<Question>() { @Override public Predicate toPredicate(Root<Question> root, CriteriaQuery<?> query, CriteriaBuilder cb) { Predicate predicate = cb.conjunction(); List<Expression<Boolean>> expressions = predicate.getExpressions(); if (StringUtils.isNotBlank(keyword)) { expressions.add(cb.like(root.<String>get("keyword"), "%"+keyword+"%")); } if (StringUtils.isNotBlank(knowledge)) { expressions.add(cb.like(root.<String>get("knowledge"), "%"+knowledge +"%")); } if (NumberUtils.isDigits(type)) { expressions.add(cb.equal(root.<String>get("type"), type)); } if(StringUtils.isNotBlank(itemBankId)) { expressions.add(cb.equal(root.<String>get("puuid"), itemBankId)); } if(NumberUtils.isDigits(gradeId)) { expressions.add(cb.equal(root.<Grade>get("grade").<Long>get("id"), NumberUtils.toLong(gradeId))); } if(NumberUtils.isDigits(subjectId)) { expressions.add(cb.equal(root.<Subject>get("subject").<Long>get("id"), NumberUtils.toLong(subjectId))); } expressions.add(cb.equal(root.<Long>get("deleteBy"), 0)); return predicate; } },pageable); return question; }
此操作為多表聯查: root.<Subject>get("subject") .<Long>get("id")表示取Question的屬性subject對應的Subject物件的id欄位的值,類似於sql中的join操作。
另記錄一下利用遊標查詢記錄總數:
public int findPageByQuery(final String sql, final Object[] parameters) { //em ==> EntityManager Session session = (Session) em.getDelegate(); Query query = session.createQuery(sql); if (parameters != null) { for (int i = 0; i < parameters.length; i++) { query.setParameter(i, parameters[i]); } } //獲取遊標 ScrollableResults sr = query.scroll(); sr.last(); int totalCount = sr.getRowNumber(); return totalCount + 1; }
相關推薦
spring-data-jpa 多條件查詢 學習記錄
spring-data-jpa 是對資料庫訪問的簡化的封裝,可以幫助我們更加方便的實現對資料庫的各種操作。Spring Data JPA 規範方法的名字,根據符合規範的名字來確定方
Spring data jpa 多條件查詢(條件為時間)
直接程式碼附上:SimpleDateFormat sdfmat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try { if (StringUtils.isNotEmpty(startTime) && S
Spring Data JPA 多條件查詢
Spring Data JPA 查詢很方便,但做搜尋功能時,條件都是未知的,並不能用方法命名的方式查詢,自己寫JPQL,用表示式的方式處理也不靠譜,條件多了簡直就是作死,以前寫過下面的程式碼:
Spring data jpa 多表查詢(二:多表動態條件查詢)
上一章說完單表動態條件查詢,這章就說下多表關聯查詢 1、先說一對多關係,就以上一章的A模型和B模型,為例 A 對應 多個 B,而現在需求就是查詢A和B關聯,並需要傳入的動態引數,可能是A模型中的屬性,也有可能是B模型中的引數 還是用虛擬碼來說明,並且用的是Specifi
快速學習Spring Data JPA -- 第六章JPA多條件查詢
xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! 在Springle Data JPA中,我們看到了JPA由於不需要寫SQL給我們簡化了很多的工作。同時JPA的特性,讓我們對資料層面的操作
spring data jpa 多表UNION ALL查詢按條件排序分頁處理:未搜到方法,解決後記錄:2018年11月13日15:22:00
需求:Mysql資料庫 有不同屬性的兩張表,需要進行按某個條件查詢,結果合併排序分頁。 讓產品把兩個表分成兩段展示各查各的,分開來。 產品經理說能實現:產品寫sql 聯合查詢, A UNION AL
Spring Data JPA 多個實體類表聯合視圖查詢
test where part 左連接 lec 視圖 view new manytoone Spring Data JPA 查詢數據庫時,如果兩個表有關聯,那麽就設個外鍵,在查詢的時候用Specification創建Join 查詢便可。但是只支持左連接,不支持右連接,雖說左
Spring Data Jpa多表聯合分頁查詢
參考:https://blog.csdn.net/qq_36144258/article/details/80298354 近期一個專案用到Spring Data Jpa,Jpa用來做單表查詢非常的簡單粗暴,可以說不用寫sql,但是涉及到複雜的多表操作,還是要寫sql,這個時候需要用到@Quer
spring data jpa 多對一聯表查詢
資料庫: 實體類: public class Product { @Id @GeneratedValue private Long id; private String name; private Double pri
spring-data-jpa 介紹 複雜查詢,包括多表關聯,分頁,排序
本篇進行Spring-data-jpa的介紹,幾乎涵蓋該框架的所有方面,在日常的開發當中,基本上能滿足所有需求。這裡不講解JPA和Spring-data-jpa單獨使用,所有的內容都是在和Spring整合的環境中實現。如果需要了解該框架的入門,百度一下,很多入門的介紹。在這篇
【Spring Data 系列學習】Spring Data JPA @Query 註解查詢
# 【Spring Data 系列學習】Spring Data JPA @Query 註解查詢 前面的章節講述了 Spring Data Jpa 通過宣告式對資料庫進行操作,上手速度快簡單易操作。但同時 JPA 還提供通過註解的方式實現,通過將 `@Query` 註解在繼承 repository 的介面類
Spring Data JPA 實例查詢
customer 數據庫表 查詢方式 記錄 如何 三、認識“實例查詢” 1、概念定義: 上面例子中,是這樣創建“實例”的:Example<Customer> ex = Example.of(customer, matcher);我們看到,Example對象,由custom
spring data JPA各種套路深入學習
基本查詢 基本查詢也分為兩種,一種是spring data預設已經實現,一種是根據查詢的方法來自動解析成SQL。 預先生成方法 spring data jpa 預設預先生成了一些基本的CURD的方法,例如:增、刪、改等等 1 繼承JpaRepository pu
Spring Data JPA 多資料來源的使用
1 第3-6課:Spring Data JPA 多資料來源的使用 專案中使用多個數據源在以往工作中比較常見,微服務架構中不建議一個專案使用多個數據源。在微服務架構下,一個微服務擁有自己獨立的一個數據庫,如果此微服務要使用其他資料庫的資料,需要呼叫對應庫的微服務介面來呼叫,
spring data jpa 分頁查詢
法一(本地sql查詢,注意表名啥的都用資料庫中的名稱,適用於特定資料庫的查詢) public interface UserRepository extends JpaRepository<User, Long> { @Query(value = "SE
spring data elasticsearch 多索引查詢(切換索引)
最近在做專案的時候,遇到一個問題,要訪問不同索引(可以當成分庫去理解),如果是用直接請求的方式很容易做到,但是用了spring-data-elasticsearch好像不是很好實現,在網上看到基本上都是indexName直接賦值。如果也有這樣需求的可以試試我的方法,下面就具體
Spring-Data-JPA 自定義查詢方法底層如何處理
public interface UserDao extends JpaRepository<User, Integer>{ //自定義查詢 /** * 方法簽名已經告訴spring-data-jpa足夠的資訊來建立這個方法的實現了 * spri
Spring Data JPA之動態查詢
在日常工作中,Spring Data JPA的使用給我們帶來了極大的方便,但是實際業務中很多場景需要支援動態查詢。比如前端查詢功能提供了很多查詢條件,使用者可以根據一部分條件進行查詢,那麼後端就需要支援可配置的查詢服務。在使用mybatis等時,可以用動態查詢的方式輕鬆搞定,
springboot結合spring-data-jpa的動態查詢
Criteria API 這套API可用於構建對資料庫的查詢。型別安全。通過定義元資料模型,在程式編譯階段就可以對型別進行檢查,不像SQL需要與Mysql進行互動後才能發現型別問題。 如下即為元資料模型。建立一個元模型類,類名最後一個字元為下劃線,內部的成員變數與Girl.
Spring data jpa的高階查詢的應用和底層原理分析
spring data jpa的查詢 目前比較簡單的查詢: 三種查詢方案的寫法 固定引數查詢 interface XxxRepo implements JpaRepository<T,Long>{ EntityXxx findByNameAnd