origin: https://www.cnblogs.com/rulian/p/6434631.html
JPA可以解析find开头的方法生成查询,减少SQL语句编写
1.规则:find+全局修饰+By+实体的属性名称+关键词+连接词+ …(其它实体属性)+OrderBy+排序属性+排序方向。
// 等同于select * from user where name = ?1
List<UserEntity> findByName(String name);
全局修饰 | Distinct, Top, First (Top First可跟条目数,默认为1 例 Top10) |
限定词 | IsNull, IsNotNull, Like, NotLike, Containing, In, NotIn, IgnoreCase, Between, Equals, LessThan, GreaterThan, After, Before… |
连接词 | And, Or |
排序方向 | Asc, Desc |
2.排序
以findAll方法为例,此方法可接收Sort实例以进行排序
/*
* (non-Javadoc)
* @see org.springframework.data.repository.PagingAndSortingRepository#findAll(org.springframework.data.domain.Sort)
*/
@Override
List<T> findAll(Sort sort);
Sort提供了Sort.by等方法以获取Sort实例
// List<UserEntity> list = userRepository.findAll(Sort.by(Sort.Direction.DESC,"id"));
// List<UserEntity> list = userRepository.findAll(Sort.by("id"));
// Sort.Order order = new Sort.Order(Sort.Direction.DESC,"id");
// List<UserEntity> list = userRepository.findAll(Sort.by(order));
// Sort.Order order = new Sort.Order(Sort.Direction.DESC,"id");
// Sort.Order[] orders = new Sort.Order[1];
// orders[0] = order;
// List<UserEntity> list = userRepository.findAll(Sort.by(orders));
// Sort.Order order = new Sort.Order(Sort.Direction.DESC,"id");
// List<Sort.Order> orderList = new ArrayList<>();
// orderList.add(order);
// List<UserEntity> list = userRepository.findAll(Sort.by(orderList));
3.分页
以findAll方法为例,此方法可接收Pageable实例以进行分页
Page<T> findAll(Pageable pageable);
PageRequest提供了of等方法以获取PageRequest实例
int page = 1;
int pageSize = 1;
Sort.Direction direction = Sort.Direction.DESC;
// List<UserEntity> list = userRepository.findAll(PageRequest.of(page,pageSize)).getContent();
// 可同时排序
// Sort sort = Sort.by("id");
// List<UserEntity> list = userRepository.findAll(PageRequest.of(page,pageSize,sort)).getContent();
// 可同时排序
// List<UserEntity> list = userRepository.findAll(PageRequest.of(page,pageSize,direction,"id")).getContent();
// 等价于 PageRequest.of(0, pageSize);
// List<UserEntity> list = userRepository.findAll(PageRequest.ofSize(pageSize)).getContent();