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

您所在的位置:网站首页 pagerequest爆红 spring jpa 带参数分页查询(一)

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

2023-01-20 06:10| 来源: 网络整理| 查看: 265

 

1、写个接口继承JpaRepository

@NoRepositoryBean public interface BaseRepository extends JpaRepository { }

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

@NoRepositoryBean public interface JpaRepository extends PagingAndSortingRepository, QueryByExampleExecutor { List findAll(); List findAll(Sort var1); List findAll(Iterable var1); List save(Iterable var1); void flush(); S saveAndFlush(S var1); void deleteInBatch(Iterable var1); void deleteAllInBatch(); T getOne(ID var1); List findAll(Example var1); List findAll(Example var1, Sort var2); }

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

@NoRepositoryBean public interface PagingAndSortingRepository extends CrudRepository { Iterable findAll(Sort sort); Page findAll(Pageable pageable); }

 4、精彩部分来了

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

如果我们需要查询某个条件下的分页,那该怎么办呢?看下面我们的jpa dao接口

  

@Transactional public interface UserJPA extends JpaRepository { //查询大于20岁的用户 @Query(value = "select * from t_user where t_age > ?1",nativeQuery = true) public List 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 findByName(String name, Pageable pageable);//直接添加分页参数 //可以是多个参数的分页查询 pageable Page findByNameAndAddress(String name,String addr, Pageable pageable); }

  

看下面的两种情况:

1、返回类型为Page

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

2、返回格式为list

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

List findByNameAndAddress(String name,String addr, Pageable pageable);

  

@RequestMapping("/pagetest") public List 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集合。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3