[Spring Data JPA] Derived Query Methods -- findBy*& update & delete

Entity:

Employee.java

package com.skillsoft.springdatajpa.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name= "Employee")
public class Employee {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private String email;



    public Employee() {}

    public Employee(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public void setId(final Long id) {
        this.id = id;
    }

    public void setName(final String name) {
        this.name = name;
    }

    public void setEmail(final String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "Emplyee{" +
                "id=" + getId() +
                ", name='" + getName() + '\'' +
                ", email='" + getEmail() + '\'' +
                '}';
    }
}

Basic findBy method:

	@Bean
	public CommandLineRunner EmployeeDemo(EmployeeRepository employeeRepository) {
		return (args) -> {
			employeeRepository.save(new Employee("Renee Bauer", "reene_bauer@exmaple.com"));
			employeeRepository.save(new Employee("Raj Chawanda", "raj_chawanda@exmaple.com"));
			employeeRepository.save(new Employee("Neil Parks", "neil_parks@exmaple.com"));
			employeeRepository.save(new Employee("Marcia Lin", "Marcia_lin@exmaple.com"));

			// SELECT * form Empployee
			System.out.println("\n***************");
			System.out.println("\nRetrieving all employee data..");
			for (Employee em : employeeRepository.findAll()) {
				System.out.println(em.toString());
			}

			System.out.println("\n***************");
		};
	}

[Tip]: Enhacne Java For Loop

for (Employee em : employeeRepository.findAll()) {
	System.out.println(em.toString());
}

findById():

// SELECT * FROM Employee WHERE id = 1
Employee em = employeeRepository.findById(1L).get();
System.out.println(em.toString());

[Tips]

1. Convert int to Long

//Int 1 convert to Long
1L
    
// or
Long.valueOf(1)

2. findById(Long) migth not find a value, so it return a Optional Type, similar to Maybe, Either type in fp-js.

To get value out of Optional type, you will to call get()

import java.util.Optional;

Optional<Employee> oem = employeeRepository.findById(10L);
Employee em = oem.get();

If not value found, will throw in the code above, to improve it

Optional<Employee> oem = employeeRepository.findById(10L);
if (!oem.isEmpty()) {
	Employee em = oem.get();
	System.out.println(em.toString());
}

findBy*():

Currently we have an empty repository:

package com.skillsoft.springdatajpa.repository;

import org.springframework.data.repository.CrudRepository;
import com.skillsoft.springdatajpa.model.Employee;
public interface EmployeeRepository extends CrudRepository<Employee, Long> {

}

If we want to do findByEmail(string), we can do:

public interface EmployeeRepository extends CrudRepository<Employee, Long> {
    Employee findByEmail(String email);
}
Employee em2 = employeeRepository.findByEmail("neil_parks@exmaple.com");
System.out.println(em2.toString());

Handle multi results return by findBy*:

public interface EmployeeRepository extends CrudRepository<Employee, Long> {
    Employee findByEmail(String email);
    List<Employee> findByName(String name);
}
List<Employee> employees = employeeRepository.findByName("Marcia Lin");
for (Employee ee : employees) {
	System.out.println(ee.toString());
}

Handle empty result return by findBy*:

import java.util.List;
import java.util.Optional;

public interface EmployeeRepository extends CrudRepository<Employee, Long> {
    Optional<Employee> findByEmail(String email);
    Optional<List<Employee>> findByName(String name);
}

Update and delete

Optional<Employee> em2 = employeeRepository.findByEmail("neil_parks@exmaple.com");
if (em2.isPresent()) {
	Employee ee = em2.get();
	ee.setEmail("neil_parks@gmail.com");
	employeeRepository.save(ee);
}

Optional<Employee> em3 = employeeRepository.findByEmail("Marcia_lina2@exmaple.com");
if (em3.isPresent()) {
	Employee ee3 = em3.get();
	employeeRepository.delete(ee3);
	employeeRepository.deleteById(1L);
}