实体类
package com.wangh.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity(name="Person")
public class Person {
private Integer id;private String name;private Integer age;@GeneratedValue@Idpublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";}}
接口
package com.wangh.repository;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;import com.wangh.model.Person;
public interface PersonJpaSpecifactionRepository extends JpaSpecificationExecutor<Person>,JpaRepository<Person, Integer>{
}
service
package com.wangh.serviceimport java.util.Listimport javax.annotation.Resourceimport org.springframework.data.domain.Page
import org.springframework.data.domain.Pageable
import org.springframework.data.jpa.domain.Specification
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactionalimport com.wangh.model.Person
import com.wangh.repository.PersonCrudRepository
import com.wangh.repository.PersonJpaSpecifactionRepository
import com.wangh.repository.PersonPagingAndSortRepository@Service
public class PersonService {@Resourceprivate PersonJpaSpecifactionRepository personJpaSpecifactionRepositorypublic Page<Person> query(Specification<Person> spec, Pageable pageable){return personJpaSpecifactionRepository.findAll(spec, pageable)}
}
测试类
package springdataimport java.util.ArrayList
import java.util.Listimport javax.persistence.criteria.CriteriaBuilder
import javax.persistence.criteria.CriteriaQuery
import javax.persistence.criteria.Path
import javax.persistence.criteria.Predicate
import javax.persistence.criteria.Rootimport org.junit.After
import org.junit.Before
import org.junit.Test
import org.springframework.context.ApplicationContext
import org.springframework.context.support.ClassPathXmlApplicationContext
import org.springframework.data.domain.Page
import org.springframework.data.domain.PageRequest
import org.springframework.data.domain.Pageable
import org.springframework.data.domain.Sort
import org.springframework.data.domain.Sort.Direction
import org.springframework.data.domain.Sort.Order
import org.springframework.data.jpa.domain.Specificationimport com.wangh.model.Person
import com.wangh.service.PersonServicepublic class PersonRepositoryTest {private ApplicationContext ctx = nullprivate PersonService psv = null@Beforepublic void before(){ctx = new ClassPathXmlApplicationContext("spring.xml")psv = ctx.getBean(PersonService.class)System.out.println("before")}@Afterpublic void after(){ctx = nullpsv = nullSystem.out.println("after")}@Testpublic void query(){Specification<Person> spec = new Specification<Person>() {@Overridepublic Predicate toPredicate(Root<Person> root, CriteriaQuery<?> query, CriteriaBuilder cb) {Path path = root.get("age")return cb.lt(path, 15)}}Order order = new Order(Direction.DESC, "id")Sort sort = new Sort(order)Pageable pageable = new PageRequest(0, 3, sort)Page<Person> page = psv.query(spec, pageable)System.out.println("当前页码上行数:"+page.getNumberOfElements())System.out.println("当前第几页:"+page.getNumber()+1)System.out.println("总数:"+page.getTotalElements())System.out.println("总页数:"+page.getTotalPages())System.out.println("当前页内容:"+page.getContent())}
}
测试结果
