需求:排行榜功能需要全表中条件查询并排序,取出前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());
}