SpringJpa学习教程-03高级查询
分页查询
/**
* 根据分页条件进行查询,将结果保存在Page当中
*/
Page<User> findByName(String name, Pageable pageable);
/**
* 根据分页条件进行查询,但不查询总记录数
*/
Slice<user> findByName(String name, Pageable pageable);
/**
* 根据所选择的排序条件进行排序
*/
List<User> findByName(String name, Sort sort);
/**
* 根据条件进行查询,并把结果保存到List集合中
*/
List<User> findByName(String name, Pageable pageable);
限制查询结果条数
User findFirstByName(String name);
User findTopByName(String name);
Page<User> findFirst10ByName(String name, Pageable pageable);
Page<User> findTop3ByName(String name, Pageable pageable);
异步查询
@Async
Future<User> findFirstByEmail(String email);
返回特定字段
1. 通过接口
interface PropertiesNeedOnly {
String getName();
int getAge();
}
使用:
interface UserRepository<User, Long>{
List<PropertiesNeedOnly> findByName(String name);
}
2. 通过@Value
或SpEL表达式
interface PropertiesNeedOnly {
/**
* 返回的名称是'名字-Email'的形式
*/
@Value("#{target.name + '-' + target.email}")
String getName();
int getAge();
}
3. 通过DTO的方式
@Data
@AllArgsConstructor//必须存在
class PropertiesDto {
private final String name, email;
}
4. 动态泛型化
interface UserRepository<User, Long>{
List<T> findByName(String name, Class<T> type);
}
调用:
PropertiesDto person = userRepository.findByName("hello",PropertiesDto.class);