欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Data JPA分頁復合查詢原理解析

 更新時間:2019年11月20日 09:47:12   作者:lannoy  
這篇文章主要介紹了Spring Data JPA分頁復合查詢原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

Spring Data JPA是Spring Data家族的一部分,可以輕松實現(xiàn)基于JPA的存儲庫。 此模塊處理對基于JPA的數(shù)據訪問層的增強支持。 它使構建使用數(shù)據訪問技術的Spring驅動應用程序變得更加容易。

在相當長的一段時間內,實現(xiàn)應用程序的數(shù)據訪問層一直很麻煩。 必須編寫太多樣板代碼來執(zhí)行簡單查詢以及執(zhí)行分頁和審計。 Spring Data JPA旨在通過減少實際需要的工作量來顯著改善數(shù)據訪問層的實現(xiàn)。

作為開發(fā)人員,您編寫repository接口,包括自定義查找器方法,Spring將自動提供實現(xiàn)。例如,你繼承JpaRepository<實體類,主鍵類型>,他會提供很方便的查詢方法,運用findby+字段,完全不需要開發(fā)人員寫sql就可以查詢你需要的。

至于findby的用法可以百度,可以拼接很多關鍵字來擴展。這個是一般情況,但是實際中可能用的地方就不會這么簡單了,我們來具體說說或者說舉例來說明吧。

一般:就像上面說的,優(yōu)秀。

分頁:分頁其實說白了就是2個查詢。我們通過使用標簽@query內含原生態(tài)nativeQuery=ture來手動編寫,列表sql運用value,數(shù)量sql用countQuery,返回page屬性。但是注意@query的時候有講究,當遇到不同數(shù)據庫的后面需要拼接的東西不一樣。比如orcale是?#{#pageable},mysql是 \n#pageable\n ,sqlsever是 \n-- #pageable\n 。

例:

@Query(value="select * from C_Article where type=:type \n--#pageable\n",countQuery="select count(*) from C_Article where type=:type",nativeQuery=true)

Page<C_Article> findByType(@Param("type") String type,Pageable pageable);

所以總結來說還是比較蛋疼,而且還沒說其他復合情況。

復合查詢:一般的復合我們可以用原生態(tài)的sql解決,即nativeQuery=ture。當遇到條件拼接查詢的時候我第一次就傻掉了。查了好久,沒找到感覺舒適的。他需要我們實現(xiàn)JpaRepository<實體類,主鍵類型>和JpaSpecificationExecutor<實體類>,實體類還得寫個原型類。service實現(xiàn)類里面的方法通過findAll((root, criteriaQuery, criteriaBuilder)來構造sql。

例:實體類

@Entity
@Data/**這個是lombok標簽**/
@Table(name="news")
public class News implements Serializable{
  @Id
  private String Id;

  private String Type;

  private String Title;

  private String Creater;
}

模型類

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(News.class)
public class News_ {
  public static volatile SingularAttribute<News, String> Id; 
  public static volatile SingularAttribute<News, String> Type; 
  public static volatile SingularAttribute<News, String> Title;
  public static volatile SingularAttribute<News, String> Creater; 
}

service類就不傳了??聪聅erviceImp這個里面的方法,這個是蛋疼的地方

public List<News> newsList(String type, String creater) {
  return (這個是你注入的repository)repository.findAll((root, criteriaQuery, criteriaBuilder) -> {
      List<Predicate> predicatesList = new ArrayList<>();
      if (creater!="" ) {
        predicatesList.add(
            criteriaBuilder.and(
                criteriaBuilder.like(
                    root.get(News_.Creater), "%" + creater+ "%")));
      }    
      if (type!="") {
        predicatesList.add(
            criteriaBuilder.and(
                criteriaBuilder.like(
                    root.get(News_.Type), "%"+type+"%")));
      }
      return criteriaBuilder.and(
          predicatesList.toArray(new Predicate[predicatesList.size()]));
    });
  }

DAO類

public interface NewsRepository extends JpaRepository<News, String>,JpaSpecificationExecutor<News>{
 List<News> <em id="__mceDel">newsList(String type,String create)</em>
}

criteriaBuilder這個包含不止like,還有其他的我就不一一列舉了,具體還有啥建議點進去看源碼。但是這樣一看是不是很麻煩。所以實際運用上還是不建議使用。

  總結一句話,還是老老實實用mybatis就好了,mybatis-plus搭配起來就可以寫的很舒暢了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 深入理解Hibernate中的flush機制

    深入理解Hibernate中的flush機制

    這篇文章主要介紹了深入理解Hibernate中的flush機制,本文是對flush機制深入研究得出的一些結論總結,需要的朋友可以參考下
    2015-01-01
  • SpringSecurity Jwt Token 自動刷新的實現(xiàn)

    SpringSecurity Jwt Token 自動刷新的實現(xiàn)

    這篇文章主要介紹了SpringSecurity Jwt Token 自動刷新的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Java+mysql用戶注冊登錄功能

    Java+mysql用戶注冊登錄功能

    這篇文章主要為大家詳細介紹了Java結合mysql實現(xiàn)用戶注冊登錄功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Java 數(shù)據庫連接(JDBC)的相關總結

    Java 數(shù)據庫連接(JDBC)的相關總結

    這篇文章主要介紹了Java 數(shù)據庫連接(JDBC)的相關總結,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Java判斷map是否為null或者空的方法小結

    Java判斷map是否為null或者空的方法小結

    這篇文章主要介紹了Java 如何判斷map為null或者空,文中通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-08-08
  • SpringAOP切點函數(shù)實現(xiàn)原理詳解

    SpringAOP切點函數(shù)實現(xiàn)原理詳解

    這篇文章主要介紹了SpringAOP切點函數(shù)實現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 再也不用怕! 讓你徹底搞明白Java內存分布

    再也不用怕! 讓你徹底搞明白Java內存分布

    做Java的大都沒有c++ 的那種分配內存的煩惱,因為Java 幫我們管理內存,但是這并不代表我們不需要了解Java的內存結構,因為線上經常出現(xiàn)內存的問題,今天聊一下內存的問題,需要的朋友可以參考下
    2021-06-06
  • JAVA多線程處理for循環(huán)數(shù)據詳細講解

    JAVA多線程處理for循環(huán)數(shù)據詳細講解

    這篇文章主要給大家介紹了關于JAVA多線程處理for循環(huán)數(shù)據的相關資料,我們在代碼中經常需要使用for循環(huán)這個操作來達到目的,而當for循環(huán)的次數(shù)過多時我們會發(fā)現(xiàn)執(zhí)行效率會變的很低,整體耗時非常多,需要的朋友可以參考下
    2023-07-07
  • Java如何解決發(fā)送Post請求報Stream?closed問題

    Java如何解決發(fā)送Post請求報Stream?closed問題

    這篇文章主要介紹了Java如何解決發(fā)送Post請求報Stream?closed問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java中的maven和gradle的比較與使用詳解

    Java中的maven和gradle的比較與使用詳解

    這篇文章主要介紹了maven和gradle的比較與使用,Maven使用基于XML的配置,Gradle采用了領域特定語言Groovy的配置,在Maven中要引入一個依賴,需要的朋友可以參考下
    2022-04-04

最新評論