• 适合多条件模糊查询和筛选

    参考1:https://cloud.tencent.com/developer/article/1429349
    参考2:https://blog.csdn.net/J080624/article/details/84581231

    1. 创建接口

      1. // 创建接口
      2. public interface UserDao extends JpaRepository<User, Integer>, JpaSpecificationExecutor<Users> {
      3. }
    2. 单条件查询 ```java /**

    • 单条件查询
    • 需求:根据用户姓名查询数据 */ @Test public void test1(){ Specification spec = new Specification() {
      1. /**
      2. * @return Predicate:定义了查询条件
      3. * @param Root<Users> root:根对象。封装了查询条件的对象
      4. * @param CriteriaQuery<?> query:定义了一个基本的查询.一般不使用
      5. * @param CriteriaBuilder cb:创建一个查询条件
      6. */
      7. @Override
      8. public Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
      9. Predicate pre = cb.equal(root.get("username"), "王五");
      10. return pre;
      11. }
      }; List list = this.usersDao.findAll(spec); } ```
    1. 多条件查询

      1. /**
      2. * 多条件查询 方式一
      3. */
      4. @Test
      5. public void test2() {
      6. Specification<Users> spec = new Specification<Users>() {
      7. @Override
      8. public Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
      9. List<Predicate> list = new ArrayList<>();
      10. list.add(cb.equal(root.get("username"), "王五"));
      11. list.add(cb.equal(root.get("userage"), 24));
      12. //此时条件之间是没有任何关系的。
      13. Predicate[] arr = new Predicate[list.size()];
      14. return cb.and(list.toArray(arr));
      15. }
      16. };
      17. List<Users> list = this.usersDao.findAll(spec);
      18. }
    2. 分页排序

    1. /**
    2. * 需求:查询数据库中王姓的用户,做分页处理,并且根据用户 id 做倒序排序
    3. */
    4. @Test
    5. public void test6(){
    6. //排序等定义
    7. Sort sort = new Sort(Sort.Direction.DESC,"userid");
    8. //分页的定义
    9. Pageable pageable = new PageRequest(0,2, sort);
    10. //查询条件
    11. Specification<Users> spec = new Specification<Users>() {
    12. @Override
    13. public Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
    14. return cb.like(root.get("username").as(String.class),
    15. "王%");
    16. }
    17. };
    18. Page<Users> page = this.usersDao.findAll(spec, pageable);
    19. log.debug("总条数:"+page.getTotalElements());
    20. log.debug("总页数:"+page.getTotalPages());
    21. List<Users> list = page.getContent();
    22. }