您好,登錄后才能下訂單哦!
這篇文章主要介紹Spring Data JPA分頁復合查詢的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
Spring Data JPA是Spring Data家族的一部分,可以輕松實現基于JPA的存儲庫。 此模塊處理對基于JPA的數據訪問層的增強支持。 它使構建使用數據訪問技術的Spring驅動應用程序變得更加容易。
在相當長的一段時間內,實現應用程序的數據訪問層一直很麻煩。 必須編寫太多樣板代碼來執行簡單查詢以及執行分頁和審計。 Spring Data JPA旨在通過減少實際需要的工作量來顯著改善數據訪問層的實現。
作為開發人員,您編寫repository接口,包括自定義查找器方法,Spring將自動提供實現。例如,你繼承JpaRepository<實體類,主鍵類型>,他會提供很方便的查詢方法,運用findby+字段,完全不需要開發人員寫sql就可以查詢你需要的。
至于findby的用法可以百度,可以拼接很多關鍵字來擴展。這個是一般情況,但是實際中可能用的地方就不會這么簡單了,我們來具體說說或者說舉例來說明吧。
一般:就像上面說的,優秀。
分頁:分頁其實說白了就是2個查詢。我們通過使用標簽@query內含原生態nativeQuery=ture來手動編寫,列表sql運用value,數量sql用countQuery,返回page屬性。但是注意@query的時候有講究,當遇到不同數據庫的后面需要拼接的東西不一樣。比如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);
所以總結來說還是比較蛋疼,而且還沒說其他復合情況。
復合查詢:一般的復合我們可以用原生態的sql解決,即nativeQuery=ture。當遇到條件拼接查詢的時候我第一次就傻掉了。查了好久,沒找到感覺舒適的。他需要我們實現JpaRepository<實體類,主鍵類型>和JpaSpecificationExecutor<實體類>,實體類還得寫個原型類。service實現類里面的方法通過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類就不傳了。看下serviceImp這個里面的方法,這個是蛋疼的地方
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搭配起來就可以寫的很舒暢了。
以上是“Spring Data JPA分頁復合查詢的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。