如何给JpaRepository派生查询方法添加排序规则无需编写额外SQL
解决方案
完全可以在不编写自定义SQL的前提下实现排序需求,常用有两种实现方案:
方案1:调用方法时传入带排序规则的Pageable参数
这是最灵活的方案,适合排序规则需要动态调整的场景。构造Pageable对象时指定排序规则即可,示例代码如下:
// 构造排序规则:按实体类的entityId属性升序,对应数据库ORDER BY ENTITY_ID Sort sort = Sort.by(Sort.Direction.ASC, "entityId"); // 构造分页参数,将排序规则传入PageRequest Pageable pageable = PageRequest.of(页码, 每页条数, sort); // 调用Repository方法时传入带排序的pageable即可 Page<Entity> result = postRepository.findAllByBookIdAndStatus(bookId, postStatus, pageable);
注意:
Sort.by的第二个参数填实体类的属性名,不是数据库的列名,Spring Data JPA会自动根据实体的字段映射规则转换为对应的数据库列名。
方案2:修改方法名添加静态排序规则
如果该方法的排序逻辑固定,每次调用都需要按ENTITY_ID排序,可以直接利用Spring Data JPA的方法名派生规则,在方法名后添加OrderBy后缀实现静态排序,修改后的Repository方法如下:
Page<Entity> findAllByBookIdAndStatusOrderByEntityIdAsc(Integer bookId, PostStatus postStatus, Pageable pageable);
这种方案下,即使你传入的Pageable没有携带排序参数,查询也会默认按entityId升序排列。如果传入的Pageable自带其他排序规则,那么Pageable的排序优先级会高于方法名定义的静态排序,二者会叠加生效。
内容的提问来源于stack exchange,提问作者user13566239
相关产品推荐
相关产品推荐

