JPA接口查詢方法


JPA接口查詢方法

1.Repository接口

Spring Data 里面做數據庫操作的最底層的抽象接口,最頂級的父類,源碼里面其實什么方法都沒有,僅僅起到一個標識作用。管理域類以及域類的 ID 類型作為類型參數,此接口主要作為標記接口來捕獲 要使用的類型,並幫助用戶發現擴展此接口的接口。Spring 底層做動態代理的時候發現只要是它的子類或者實現類,都代表對儲存庫操作。

image

2.CrudRepository接口

相關方法

@NoRepositoryBean public interface CrudRepository<T, ID> extends Repository<T, ID> { 
    //保存或修改 
    <S extends T> S save(S var1);
    //(1) 
    //批量保存 
    <S extends T> Iterable<S> saveAll(Iterable<S> var1);
    //(2) 
    //根據主鍵查詢實體 
    Optional<T> findById(ID var1);
    //(3) 
    //根據主鍵判斷實體是否存在 
    boolean existsById(ID var1);
    //(4) 
    //查詢實體的所有列表 
    Iterable<T> findAll
    //(5) 
    //根據主鍵列表查詢實體列表 
    Iterable<T> findAllById(Iterable<ID> var1);
    //(6) 
    //查詢總數 
    long count();
    //(7) 
    //根據主鍵刪除 
    void deleteById(ID var1);
    //(8) 
    //根據實體對象刪除 
    void delete(T var1);
    //(9) 
    //根據實體對象批量刪除 
    void deleteAll(Iterable<? extends T> var1);
    //(10) 
    //刪除所有數據 
    void deleteAll();//(11) 
}

接口使用

/*** 用戶接口 */ public interface UserCrudRepository extends CrudRepository<User,Integer> { }

測試類

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private UserRepository userRepository;

    @Test
    void testInsert() {
        User u = new User();
        u.setUsername("哈哈");
        u.setPassword("123");
        u.setCreateTime(new Date().getTime());
        userRepository.save(u);
    }

    @Test
    void testDelete(){
        User u = new User();
        u.setUserId(1L);
        userRepository.delete(u);
    }

    @Test
    void testUpdate(){
        User u = new User();
        u.setUserId(2L);
        u.setUsername("阿偉");
        userRepository.save(u);
    }

    @Test
    void testSelect(){
        List<User> users = new ArrayList<>();
        users = (List<User>) userRepository.findAll();
        users.forEach(System.out::println);
    }

}

3.PagingAndSortingRepository接口的使用

接口使用

public interface UserRepository extends PagingAndSortingRepository<User, Integer> {
}

相關方法

@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
    Iterable<T> findAll(Sort var1);

    Page<T> findAll(Pageable var1);
}

測試類

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private UserRepository userRepository;
    
    /**
     * 排序查詢
     */
    @Test
    void testFindAllSort(){
       Iterable<User> userIterable =  userRepository.findAll(Sort.by(Sort.Direction.DESC, "userId"));
        for (User u : userIterable) {
            System.out.println(u);
        }
    }

    /**
    排序分頁
     */
    @Test
    void testFindAllSortAndPage(){
        int pageIndex = 3;//頁碼
        int pageSize = 5;//每頁的數量
        Iterable<User> userIterable =  userRepository.findAll(PageRequest.of(pageIndex-1, pageSize, Sort.by(Sort.Direction.DESC,
                "userId")));
        for (User u: userIterable){
            System.out.println(u);
        }

    }
}

4.JpagRepository接口的使用

接口使用

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

相關方法

@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);
}

5.JpaSpecificationExecutor接口的使用

接口使用

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

相關方法

public interface JpaSpecificationExecutor<T> {
    Optional<T> findOne(@Nullable Specification<T> var1);

    List<T> findAll(@Nullable Specification<T> var1);

    Page<T> findAll(@Nullable Specification<T> var1, Pageable var2);

    List<T> findAll(@Nullable Specification<T> var1, Sort var2);

    long count(@Nullable Specification<T> var1);
}

測試類

@SpringBootTest
class DemoApplicationTests {
    
    @Test
    void test(){
        Page<User> userPage = userRepository.findAll(new Specification<User>() {
            @Override
            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
                //獲取條件參數對象
                Predicate predicate = cb.conjunction();
                predicate.getExpressions().add(cb.like(root.get("username"), "%"+ "偉" +"%"));
                return predicate;
            }
        }, PageRequest.of(0, 1, Sort.by(Sort.Direction.DESC, "userId")));
        List<User> users = userPage.getContent();
        for(User u : users){
            System.out.println(u);
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM