This document will give example with Spring Boot using Spring Data
The below class will give Employee entity
package com.springbootdatademo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="employee")
public class Employee {
@Id
@Column(name="emp_id")
private Integer empId;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
public Integer getEmpId() {
return empId;
public void setEmpId(Integer empId) {
this.empId = empId;
public String getFirstName() {
return firstName;
public void setFirstName(String firstName) {
this.firstName = firstName;
public String getLastName() {
return lastName;
public void setLastName(String lastName) {
this.lastName = lastName;
}
EmployeeRepository—this class is Repository
package com.springbootdatademo;
import java.util.List;
import org.springframework.boot.autoconfigure.data.web.SpringDataWebProperties.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
public interface EmployeeRepository extends JpaRepository<Employee,Integer> {
@Query("FROM Employee where firstName=?1")
List<Employee> findByFirstName(String firstName);
@Query("FROM Employee where firstName=?1 and lastName=?2")
List<Employee> findByFirstAndLastName(String firstName,String lastName);
@Query("FROM Employee WHERE firstName=:fName "
+ "and lastName=:lName")
List<Employee> findByFirstAndLastNameUsingNamedParam(
@Param("lName") String lastName,
@Param("fName") String firstName);
@Query("SELECT emp.id, emp.firstName FROM Employee emp "
+ "WHERE firstName=:fName "
+ "and lastName=:lName")
List<Object[]> getIdFromFirstAndLastName(
@Param("fName") String firstName,
@Param("lName") String lastName);
@Query(value="select * FROM Employee WHERE firstName=?1 "
+ "and lastName=?2"
,nativeQuery=true)
List<Employee> findByFirstAndLastNameUsingNativeSQL(String firstName,
String lastName);
@Query("FROM Employee WHERE firstName = ?1")
List<Employee> findByFirstName(String firstName, Pageable pageable);
The service class will connect to Repository
package com.springbootdatademo;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class EmployeeService {
@Autowired
EmployeeRepository employeeRepository;
@Autowired
EntityManager entityManager;
public Employee getEmployeeById(int id) {
return employeeRepository.findById(id).get();
public List<Employee> getAllEmployee() {
return employeeRepository.findAll();
public void saveEmployee(Employee employee) {
employeeRepository.save(employee);
System.out.println("employee saved");
}
public void deleteEmployee(int empId) {
Employee employee = employeeRepository.findById(empId).get();
employeeRepository.delete(employee);
public List<Employee> findByFirstName(String firstName) {
return employeeRepository.findByFirstName(firstName);
public List<Employee> findByFirstAndLastName(String firstName,
String lastName) {
return employeeRepository.findByFirstAndLastName(firstName,
lastName);
public List<Employee> findByFirstAndLastNameUsingNamedParam(
String lastName,
String firstName) {
return employeeRepository.findByFirstAndLastNameUsingNamedParam(lastName,
firstName);
public List<Object[]> getIdFromFirstAndLastName(
String firstName,
String lastName) {
return employeeRepository.getIdFromFirstAndLastName(firstName,
lastName);
}
public List<Employee> findByFirstAndLastNameUsingNativeSQL(String firstName,
String lastName) {
return employeeRepository.findByFirstAndLastNameUsingNativeSQL(
firstName,
lastName);
public List<Employee> getEmployeeData(int offset, int limit) {
/*Pageable pageable = PageRequest.of(offset,
limit);*/
OffsetBasedPageRequest pageable = new
OffsetBasedPageRequest(limit,offset);
return employeeRepository.findAll(pageable).getContent();
public List<Employee> getDataWithSorted() {
return employeeRepository.findAll(Sort.by(Sort.Direction.DESC,"firstName"));
public List<Employee> getEmployeeDataDynamically() {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Employee> criteriaQuery =
criteriaBuilder.createQuery(Employee.class);
Root<Employee> employeeRoot = criteriaQuery.from(Employee.class);
criteriaQuery.select(employeeRoot);
//adding where
int id=4;
//criteriaQuery.where(criteriaBuilder.equal(employeeRoot.get("empId"),id));
//this can be considered as Predicate .
criteriaBuilder.equal(employeeRoot.get("empId"),id)
//Predicate predicate = criteriaBuilder.equal(employeeRoot.get("empId"),id);
//criteriaQuery.where(predicate);
//Predicate predicate = criteriaBuilder.notEqual(employeeRoot.get("empId"),id);
//criteriaQuery.where(predicate);
String firstName = "mohan";
String lastName = "babu";
Predicate predicateFirstName =
criteriaBuilder.equal(employeeRoot.get("firstName"),firstName);
Predicate predicateLastName =
criteriaBuilder.equal(employeeRoot.get("lastName"),lastName);
//Predicate prediacateFirstNameOrLastName =
criteriaBuilder.or(predicateFirstName,predicateLastName);
//criteriaQuery.where(prediacateFirstNameOrLastName);
Predicate prediacateFirstNameAndLastName =
criteriaBuilder.and(predicateFirstName,predicateLastName);
criteriaQuery.where(prediacateFirstNameAndLastName);
TypedQuery<Employee> typedQuery = entityManager.createQuery(criteriaQuery);
List<Employee> employeeList = typedQuery.getResultList();
return employeeList;