[Java Spring Data] Query method clauses and expressions
Entity:
package com.example.university.domain; import javax.persistence.*; import java.util.ArrayList; import java.util.List; /** * JPA Entity representing a student at the University. * * Created by maryellenbowman */ @Entity @Table(name="STUDENT") public class Student { @Id @GeneratedValue private Integer studentId; @Embedded private Person attendee; @Column private boolean fullTime; @Column private Integer age; @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) private List<Course> courses = new ArrayList<>(); public Student(Person attendee, boolean fullTime, Integer age) { this.attendee = attendee; this.fullTime = fullTime; this.age = age; courses = new ArrayList<>(); } protected Student() { } public Integer getStudentId() { return studentId; } public Person getAttendee() { return attendee; } public void setAge(Integer age) { this.age = age; } public boolean isFullTime() { return fullTime; } public Integer getAge() { return age; } public List<Course> getCourses() { return courses; } @Override public String toString() { return "Student{" + "studentId=" + studentId + ", " + attendee + ", fullTime=" + fullTime + ", age=" + age + "}\n"; } }
package com.example.university.domain; import javax.persistence.Column; import javax.persistence.Embeddable; /** * Person encapsulates an individual's first and last name. * * Created by maryellenbowman */ @Embeddable public class Person { @Column private String firstName; @Column private String lastName; public Person(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } protected Person() { } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } @Override public String toString() { return " firstName='" + firstName + '\'' + ", lastName='" + lastName + "\' "; } }
package com.example.university.domain; import javax.persistence.*; import java.util.ArrayList; import java.util.List; /** * JPA Entity for a Course offered at the University. * * Created by maryellenbowman. */ @Entity @Table(name="COURSE") public class Course { @Id @GeneratedValue private Integer id; @Column private String name; @Column private Integer credits; @OneToOne private Staff instructor; @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) private List<Course> prerequisites = new ArrayList<>(); @ManyToOne private Department department; public Course(String name, Integer credits, Staff instructor, Department department) { this.name = name; this.credits = credits; this.instructor = instructor; this.department = department; } protected Course() { } public Integer getId() { return id; } public String getName() { return name; } public Staff getInstructor() { return instructor; } public Department getDepartment() { return department; } public Course addPrerequisite(Course prerequisite){ prerequisites.add(prerequisite); return this; } @Override public String toString() { return "Course{" + "name='" + name + '\'' + ", id=" + id + ", credits=" + credits + ", instructor=" + instructor + ", department=" + department.getName() + '}'; } }
package com.example.university.repo; import com.example.university.domain.Person; import com.example.university.domain.Student; import org.springframework.data.repository.CrudRepository; import java.util.List; /** * DataSource Management for the Students at the University. * * Created by maryellenbowman */ public interface StudentRepository extends CrudRepository<Student, Integer>{ //Simple Query Methods List<Student> findByFullTime(boolean fullTime); List<Student> findByAge(Integer age); List<Student> findByAttendeeLastName(String last); //Query Methods with Clauses and Exrpessions Student findByAttendeeFirstNameAndAttendeeLastName(String firstName, String lastName); Student findByAttendee(Person person); List<Student> findByAgeGreaterThan(int minimumAge); List<Student> findByAgeLessThan(int maximumAge); List<Student> findByAttendeeLastNameIgnoreCase(String lastName); // studentRepository.findByAttendeeLastNameLike("%i%").forEach(System.out::println); List<Student> findByAttendeeLastNameLike(String likeString); // Find highest student in the alphabet Student findFirstByOrderByAttendeeLastNameAsc(); // Find the oldest student Student findTopByOrderByAgeDesc(); // Find 3 oldest students List<Student> findTop3ByOrderByAgeDesc(); }