spring jpa 带参数分页查询(一)

 

一、写个接口继承JpaRepositoryjava

@NoRepositoryBean
public interface BaseRepository<T,PK extends Serializable> extends JpaRepository<T,PK>
{
}

二、JpaRepository内部已经有好多接口,看到已经继承了PagingAndSortingRepositoryapp

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

    List<T> findAll(Sort var1);

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

    <S extends T> List<S> save(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);
}

 三、内部有分页接口findAll(pageable pageable)spa

@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {

	Iterable<T> findAll(Sort sort);
	Page<T> findAll(Pageable pageable);
}

 四、精彩部分来了3d

能够看到,自带的接口findAll(pageable pageable)只有一个分页参数,可是没有带查询参数。code

若是咱们须要查询某个条件下的分页,那该怎么办呢?看下面咱们的jpa dao接口对象

  

@Transactional
public interface UserJPA extends JpaRepository<UserEntity,Long>
{
    //查询大于20岁的用户
    @Query(value = "select * from t_user where t_age > ?1",nativeQuery = true)
    public List<UserEntity> nativeQuery(int age);

    //根据用户名、密码删除一条数据
    @Modifying
    @Query(value = "delete from t_user where t_name = ?1 and t_pwd = ?2",nativeQuery = true)
    public void deleteQuery(String name,String pwd);
//能够看到,jpa写法findByName并无带分页(实际上jpa是根据返回的类型自动判断是否分页), //若是返回类型为Page,则返回的数据是带分页参数的集合,若是返回类型是list,则返回的数据是list集合。 Page<UserEntity> findByName(String name, Pageable pageable);//直接添加分页参数
//能够是多个参数的分页查询 pageable Page<UserEntity> findByNameAndAddress(String name,String addr, Pageable pageable); }

  

看下面的两种状况:blog

一、返回类型为Page排序

 返回的数据格式为:带分页的参数的集合继承

二、返回格式为list接口

修改jpa接口返回数据的类型为list

List<UserEntity> findByNameAndAddress(String name,String addr, Pageable pageable);

  

@RequestMapping("/pagetest")
    public List<UserEntity> getUserByPage() {
        UserEntity user = new UserEntity();
        user.setSize(2);
        user.setSord("desc");
        user.setPage(1);

        //获取排序对象
        Sort.Direction sort_direction = Sort.Direction.ASC.toString().equalsIgnoreCase(user.getSord()) ? Sort.Direction.ASC : Sort.Direction.DESC;
        //设置排序对象参数
        Sort sort = new Sort(sort_direction, user.getSidx());
        //建立分页对象,从第一页开始,此处user.getPage()-1要减一
        PageRequest pageRequest = new PageRequest(user.getPage() - 1, user.getSize(), sort);
        //执行分页查询
        String name = "admin";
        String addr = "jinansf4";
//        return  userJPA.findByName(name,pageRequest);
        return  userJPA.findByNameAndAddress(name,addr,pageRequest);
    }

能够看到返回到数据就是list集合

 

 

结论:jpa是根据返回的类型自动判断是否分页,若是返回类型为Page,则返回的数据是带分页参数的集合,若是返回类型是list,则返回的数据是list集合。

相关文章
相关标签/搜索