SpringBoot JPA实践之Specification查询分页
JPAadmin 发布于:2020-05-01 22:15:42
阅读:loading
前文在介绍全量API函数的时候有列出来findAll函数中有个Specification类型的参数,它也是JPA实现的基于对象查询的动态查询方式,它可以实现多表级联情况的参数查询,但由于个人不喜欢在Entity中配置一对一、一对多等场景,故不对其关联对象的查询实现做深入研究,实际应用的时候写SQL查询本站有提供另外一种非常方便的实现。
代码实现
Dao
/**
* Specification查询
*
* @author chendd
* @date 2020/5/2 22:18
*/
@Repository
public class UserPageDao {
@Resource
private UserRepository userRepository;
public Page<User> queryUsersPage(final User user , Integer page , Integer size) {
Pageable pageable = PageRequest.of(page , size , Sort.by("name"));
Page<User> pager = userRepository.findAll((Specification<User>) (root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> predicateList = new ArrayList<>();
//动态构造查询条件
String name = user.getName();
if(StringUtils.isNotEmpty(name)) {
predicateList.add(criteriaBuilder.equal(root.get("name") , name));
}
String email = user.getEmail();
if(StringUtils.isNotEmpty(email)) {
predicateList.add(criteriaBuilder.like(root.get("email") , email + "%"));
}
Predicate[] predicates = new Predicate[predicateList.size()];
predicateList.toArray(predicates);
return criteriaQuery.where(predicates).getRestriction();
}, pageable);
return pager;
}
}
Test
/**
* Predicate查询分页
*
* @author chendd
* @date 2020/5/2 22:43
*/
public class UserPredicatePageTest extends ApplicationTest {
@Resource
private UserPageDao dao;
@Test
public void testUserPredicatePage() {
User user = new User();
user.setName("chendd"); //等值查询
user.setEmail("886"); //模糊查询
Page<User> page = dao.queryUsersPage(user, 0, 5);
Assert.assertNotNull(page.getContent());
}
}
点赞
发表评论
当前回复:作者
评论列表
留言区
- SpringBoot JPA实践之框架搭建
- SpringBoot JPA实践之BaseRepository
- SpringBoot JPA实践之自动生成Entity
- SpringBoot JPA实践之API介绍
- SpringBoot JPA实践之方法属性名查询
- SpringBoot JPA实践之Example对象查询
- SpringBoot JPA实践之Named查询
- SpringBoot JPA实践之@Query查询之参数传参方式
- SpringBoot JPA实践之@Query查询之动态查询条件
- SpringBoot JPA实践之@Query查询之接口结果集
- SpringBoot JPA实践之@Query查询之分页实现
- SpringBoot JPA实践之EntityManage查询返回自定义DTO
- SpringBoot JPA实践之EntityManage查询返回自定义DTO的代理实现
- SpringBoot JPA实践之表达式自定义属性与方法
- SpringBoot JPA实践之小技巧汇总