假设有个Entity为Employee
package com.mycompany.myapp.domain;
import io.swagger.v3.oas.annotations.media.Schema;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
/**
* The Employee entity.
*/
@Schema(description = "The Employee entity.")
@Entity
@Table(name = "employee")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@SuppressWarnings("common-java:DuplicatedBlocks")
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
/**
* The firstname attribute.
*/
@Schema(description = "The firstname attribute.")
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@Column(name = "phone_number")
private String phoneNumber;
// jhipster-needle-entity-add-field - JHipster will add fields here
public Long getId() {
return this.id;
}
public Employee id(Long id) {
this.setId(id);
return this;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return this.firstName;
}
public Employee firstName(String firstName) {
this.setFirstName(firstName);
return this;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}
public Employee lastName(String lastName) {
this.setLastName(lastName);
return this;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return this.email;
}
public Employee email(String email) {
this.setEmail(email);
return this;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhoneNumber() {
return this.phoneNumber;
}
public Employee phoneNumber(String phoneNumber) {
this.setPhoneNumber(phoneNumber);
return this;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
// jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Employee)) {
return false;
}
return id != null && id.equals(((Employee) o).id);
}
@Override
public int hashCode() {
// see https://vladmihalcea.com/how-to-implement-equals-and-hashcode-using-the-jpa-entity-identifier/
return getClass().hashCode();
}
// prettier-ignore
@Override
public String toString() {
return "Employee{" +
"id=" + getId() +
", firstName='" + getFirstName() + "'" +
", lastName='" + getLastName() + "'" +
", email='" + getEmail() + "'" +
", phoneNumber='" + getPhoneNumber() + "'" +
"}";
}
}
Repository
添加findAll接口,详细代码如下:
package com.mycompany.myapp.repository;
import com.mycompany.myapp.domain.Employee;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.*;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* Spring Data JPA repository for the Employee entity.
*/
@SuppressWarnings("unused")
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
List<Employee> findByEmail(String email);
Page<Employee> findAll(Specification<Employee> spec, Pageable pageable);
}
调用方Client
public void run() {
Pageable pageable = PageRequest.of(0, 20);
String email = "abc@abc.com";
Specification<Employee> spec = (root, query, criteriaBuilder) -> {
if (email == null) {
return criteriaBuilder.isTrue(criteriaBuilder.literal(true));
}
return criteriaBuilder.equal(root.get("email"), email);
};
Page<Employee> employeePage = employeeRepository.findAll(spec, pageable);
System.out.println("employeePage:" + employeePage.getContent());
}