作為一個Java程式設計師連簡單的分頁功能都會寫,你好意思嘛!

程式零世界發表於2020-08-26

今天想說的就是能夠在我們運算元據庫的時候更簡單的更高效的實現,現成的CRUD介面直接呼叫,方便快捷,不用再寫複雜的sql,帶嗎簡單易懂,話不多說上方法

1、Utils.java工具類中的方法

1 /**  2  * 獲取Sort
 3  *
 4  * @param direction  - 排序方向
 5  * @param column - 用於排序的欄位
 6  */
 7 public static Sort getSort(String direction,String column){
 8     Sort sort = null;
 9     if(column == null || column == "") return null;
10     if(direction.equals("asc")||direction.equals("ASC")){
11         sort =  Sort.by(Sort.Direction.ASC,column);
12     }else {
13         sort =  Sort.by(Sort.Direction.DESC,column);
14     }
15     return sort;
16 }
17 /**
18  * 獲取分頁
19  * @param pageNumber 當前頁
20  * @param pageSize  頁面大小
21  * @param sort 排序;sort為空則不排序只分頁
22  * @return 分頁物件
23  */
24 public static Pageable getPageable(int pageNumber,int pageSize,Sort sort){
25    if(sort!=null){
26        return PageRequest.of(pageNumber,pageSize,sort);
27    }
28        return PageRequest.of(pageNumber,pageSize);
29 }
30  /**
31      * 判斷String是否為空
32      * @param str
33      * @return
34      */
35     private static boolean isEmpty(String str){
36         if(str.equals(null)||str.equals("")) return true;
37         return false;
38     } 

2、實現類

這裡查詢相關引數是前端傳的,所以用預設值了,查詢條件可以是多條件動態,排序也可以是動態的,只要傳排序欄位和排序方向對號入座即可。

@Override
public Page<User> findAll() {
    // 建立測試物件
    User user = new User();
    user.setName("1");
    Sort sort = Utils.getSort("asc","name");
    Pageable pageable = Utils.getPageable(0,5,sort);
    // 呼叫組裝查詢條件方法
    Specification<User> spec = getSpecification(user);
    return userRepository.findAll(spec,pageable);
}

/**
 * 組裝查詢條件
 * @param user -查詢相關物件
 * @return 返回組裝過的多查詢條件
 */
private Specification<User> getSpecification(User user) {
    Specification<User> specification = new Specification<User>() {
        @Override
        public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
            List<Predicate> predicates = new ArrayList<>();
            // 判斷條件不為空
            if(!Utils.isEmpty(user.getName())){
                predicates.add(criteriaBuilder.like(root.get("name"),user.getName()));
            }
            return criteriaQuery.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
        }
    };
    return specification;
}

3.repository類中這麼寫

@Repository
 
public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {}

最後

私信回覆 資料 領取一線大廠Java面試題總結+阿里巴巴泰山手冊+各知識點學習思維導+一份300頁pdf文件的Java核心知識點總結!

這些資料的內容都是面試時面試官必問的知識點,篇章包括了很多知識點,其中包括了有基礎知識、Java集合、JVM、多執行緒併發、spring原理、微服務、Netty 與RPC 、Kafka、日記、設計模式、Java演算法、資料庫、Zookeeper、分散式快取、資料結構等等。
file

相關文章