Site Overlay

基于JPA的分页排序

需求:排行榜功能需要全表中条件查询并排序,取出前20放入redis中的zset作为初始排行榜

方法一: 原生Sql

在接口中带上@query注解,在注解参数中附上sql语句并预留占位符即可。

public interface TaskDao extends JpaRepository<Task, Long> {
  @Query("select * from tb_task t where t.task_name = ?1 order by ?2", nativeQuery = true)
  Task findByTaskName(String taskName,int chip);
}

不建议直接使用@query,因为大多数简单功能查询jpa本身已经自带,除非特别复杂或者需要特别优化的sql查询才有必要使用该方法

方法二: 通过Pageable、Sort类

在jpa的findAll方法中提供了对于Pageable类与Sort类的支持,单独的分页与单独的排序可以直接使用findAll方法利用这两个类作为条件进行查询,如果既需要排序又需要分页,可以在Pageable中插入Sort类来使用。

    @Test
    public void test() {
        Sort sort=Sort.by(Sort.Direction.DESC,"gold");//排序规则,条件字段为list,可以多个
        Pageable pageable=PageRequest.of(0,20,sort);//分页范围,排序
        Page<User> userPage = userDao.findAll(pageable);
        log.info("userPage:{}", userPage.getContent());
    }

发表评论

电子邮件地址不会被公开。 必填项已用*标注

A beliving heart is your magic My heart
Copyright © 2020 Diuut. All Rights Reserved. | Catch Vogue by Catch Themes