- 适合多条件模糊查询和筛选
参考1:https://cloud.tencent.com/developer/article/1429349
参考2:https://blog.csdn.net/J080624/article/details/84581231
创建接口
// 创建接口public interface UserDao extends JpaRepository<User, Integer>, JpaSpecificationExecutor<Users> {}
单条件查询 ```java /**
- 单条件查询
- 需求:根据用户姓名查询数据
*/
@Test
public void test1(){
Specification
spec = new Specification () {
}; List/*** @return Predicate:定义了查询条件* @param Root<Users> root:根对象。封装了查询条件的对象* @param CriteriaQuery<?> query:定义了一个基本的查询.一般不使用* @param CriteriaBuilder cb:创建一个查询条件*/@Overridepublic Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, CriteriaBuilder cb) {Predicate pre = cb.equal(root.get("username"), "王五");return pre;}
list = this.usersDao.findAll(spec); } ```
多条件查询
/*** 多条件查询 方式一*/@Testpublic void test2() {Specification<Users> spec = new Specification<Users>() {@Overridepublic Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, CriteriaBuilder cb) {List<Predicate> list = new ArrayList<>();list.add(cb.equal(root.get("username"), "王五"));list.add(cb.equal(root.get("userage"), 24));//此时条件之间是没有任何关系的。Predicate[] arr = new Predicate[list.size()];return cb.and(list.toArray(arr));}};List<Users> list = this.usersDao.findAll(spec);}
分页排序
/*** 需求:查询数据库中王姓的用户,做分页处理,并且根据用户 id 做倒序排序*/@Testpublic void test6(){//排序等定义Sort sort = new Sort(Sort.Direction.DESC,"userid");//分页的定义Pageable pageable = new PageRequest(0,2, sort);//查询条件Specification<Users> spec = new Specification<Users>() {@Overridepublic Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, CriteriaBuilder cb) {return cb.like(root.get("username").as(String.class),"王%");}};Page<Users> page = this.usersDao.findAll(spec, pageable);log.debug("总条数:"+page.getTotalElements());log.debug("总页数:"+page.getTotalPages());List<Users> list = page.getContent();}
