实体类
因为用了lombok插件所以没有对应的setter和getter方法
package com.wn.domain;
import javax.persistence.*;
@Entity
@Table(name = "customer")
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "cust_id")
private Long custId;
@Column(name = "cust_name")
private String custName;
@Column(name = "cust_gender")
private Boolean custGender;
@Column(name = "cust_address")
private String custAddress;
}
dao层接口
package com.wn.dao;
import com.wn.domain.Customer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
public interface CustomerRepository extends JpaRepository<Customer, Long>, JpaSpecificationExecutor<Customer> {
}
测试方法
/**
* 模糊查询并按id倒序并且分页
*/
@Test
public void testLikeAndOrderAndPage() {
// 构建查询条件
Specification<Customer> spec = new Specification<Customer>() {
@Override
public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
// 从root对象中获取条件相关的参数
Path<Object> path = root.get("custAddress");
// 构造查询条件参数
Predicate predicate = criteriaBuilder.like(path.as(String.class), "上%");
return predicate;
}
};
/*
创建分页参数和排序参数
第一个参数:当前页码,从0开始
第二个参数显示多少条数据
第三个参数排序对象:(
第一个参数:排序规则
第二个参数:根据实体类中的哪个属性进行排序
)
*/
Pageable pageable = PageRequest.of(1, 2, new Sort(Sort.Direction.DESC, "custId"));
// 查询
Page<Customer> page = repository.findAll(spec, pageable);
// 总记录数
System.out.println(page.getTotalElements());
// 总页数
System.out.println(page.getTotalPages());
// 每页多少条
System.out.println(page.getSize());
// 当前页
System.out.println(page.getNumber());
// 当前页数据集合
for (Customer customer : page.getContent()) {
System.out.println(customer);
}
}
源码
可以看到PageRequest对象的构造方法都被标注为过时了,替代方法则是对应的静态of()方法。