基於springdata JPA的dao層接口實現

基於springdata JPA的dao層接口實現以及分頁

1、【舉例】

只需要繼承 JpaRepository<實體類,主鍵類型>

package com.tmall.tmallspringboot.dao;

import com.tmall.tmallspringboot.pojo.Category;
import org.springframework.data.jpa.repository.JpaRepository;

public interface CategoryDao extends JpaRepository<Category,Integer> {
    //大部分crud方法都在JpaRepository及其父類中了,所以幾乎不用自己定義
}

2、【源碼】

一步步點進來,從這兩個接口可以看到幾乎提供了所有常用的方法。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.data.jpa.repository;

import java.util.List;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.QueryByExampleExecutor;

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();

    List<T> findAll(Sort var1);

    List<T> findAllById(Iterable<ID> var1);

    <S extends T> List<S> saveAll(Iterable<S> var1);

    void flush();

    <S extends T> S saveAndFlush(S var1);

    void deleteInBatch(Iterable<T> var1);

    void deleteAllInBatch();

    T getOne(ID var1);

    <S extends T> List<S> findAll(Example<S> var1);

    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.data.repository;

import java.util.Optional;

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
    <S extends T> S save(S var1);

    <S extends T> Iterable<S> saveAll(Iterable<S> var1);

    Optional<T> findById(ID var1);

    boolean existsById(ID var1);

    Iterable<T> findAll();

    Iterable<T> findAllById(Iterable<ID> var1);

    long count();

    void deleteById(ID var1);

    void delete(T var1);

    void deleteAll(Iterable<? extends T> var1);

    void deleteAll();
}

3、【自定義與分頁】

通常情況下我們的數據需要分頁顯示,而且要是需要的方法沒有提供,則需要自己定義。

首先,分頁其實jpa也幫我們做了:

我們需要做的就是:

  • 返回類型設置爲Page4Navigator<實體類>

  • 將自定義參數封裝進Pageable對象,然後在調用jpa的對應方法時把Pageable對象9行傳入即可

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

public Page4Navigator<Category> list(int start, int size, int navigatePages) {
    Sort sort = new Sort(Sort.Direction.DESC, "id");
    Pageable pageable = PageRequest.of(start, size, sort);
    Page pageFromJPA = categoryDao.findAll(pageable);

    return new Page4Navigator<>(pageFromJPA, navigatePages);
}

自定義條件查詢加分頁則需要在上面的基礎上,在dao層中添加一下:

import com.tmall.tmallspringboot.pojo.Category;
import com.tmall.tmallspringboot.pojo.Property;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PropertyDao extends JpaRepository<Property,Integer> {

  // 自定義條件查詢
    Page<Property> findByCategory(Category category, Pageable pageable);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章