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);
        }
    }
}
posted @ 2021-11-01 14:30  TidalCoast  阅读(330)  评论(0编辑  收藏  举报