From 1f40cc467555ac5b83ff66d4c3c971ce91660a45 Mon Sep 17 00:00:00 2001 From: oonyeje Date: Mon, 30 Oct 2023 17:04:53 -0400 Subject: [PATCH] - spring data JPA covered - Data Layer Repositories covered - Autowiring Repositories (Data Layer) to Service Layer Covered - Mapping Entities To Tables and Column attributes covered - Transient annotation covered - persisting data to DB through data layer covered --- .../springcrashcourse/student/Student.java | 33 +++++++++++++++++-- .../student/StudentConfig.java | 33 +++++++++++++++++++ .../student/StudentRepository.java | 9 +++++ .../student/StudentService.java | 19 ++++++----- src/main/resources/application.properties | 6 ++-- 5 files changed, 85 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/example/springcrashcourse/student/StudentConfig.java create mode 100644 src/main/java/com/example/springcrashcourse/student/StudentRepository.java diff --git a/src/main/java/com/example/springcrashcourse/student/Student.java b/src/main/java/com/example/springcrashcourse/student/Student.java index 7339983..6db1945 100644 --- a/src/main/java/com/example/springcrashcourse/student/Student.java +++ b/src/main/java/com/example/springcrashcourse/student/Student.java @@ -1,24 +1,51 @@ package com.example.springcrashcourse.student; import java.time.LocalDate; +import java.time.Period; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; + +@Entity +@Table public class Student { + @Id + @SequenceGenerator( + name = "student_sequence", + sequenceName = "student_sequence", + allocationSize = 1 + ) + @GeneratedValue( + strategy = GenerationType.SEQUENCE, + generator = "student_sequence" + ) private Long id; private String name; private String email; private LocalDate dob; + @Transient private Integer age; public Student() { } - public Student(Long id, String name, String email, LocalDate dob, Integer age) { + public Student(String name, String email, LocalDate dob) { + this.name = name; + this.email = email; + this.dob = dob; + } + + public Student(Long id, String name, String email, LocalDate dob) { this.id = id; this.name = name; this.email = email; this.dob = dob; - this.age = age; } public Long getId() { @@ -54,7 +81,7 @@ public class Student { } public Integer getAge() { - return this.age; + return Period.between(this.dob, LocalDate.now()).getYears(); } public void setAge(Integer age) { diff --git a/src/main/java/com/example/springcrashcourse/student/StudentConfig.java b/src/main/java/com/example/springcrashcourse/student/StudentConfig.java new file mode 100644 index 0000000..6567f2b --- /dev/null +++ b/src/main/java/com/example/springcrashcourse/student/StudentConfig.java @@ -0,0 +1,33 @@ +package com.example.springcrashcourse.student; + +import java.util.List; + +import java.time.LocalDate; +import java.time.Month; + +import org.springframework.boot.CommandLineRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class StudentConfig { + + @Bean + CommandLineRunner commandLineRunner(StudentRepository repository) { + return args -> { + Student mariam = new Student( + "Mariam", + "mariam.jamal@gmail.com", + LocalDate.of(2000, Month.JANUARY, 5) + ); + + Student alex = new Student( + "Alex", + "alex.jamal@gmail.com", + LocalDate.of(2004, Month.JANUARY, 5) + ); + + repository.saveAll(List.of(mariam, alex)); + }; + }; +} diff --git a/src/main/java/com/example/springcrashcourse/student/StudentRepository.java b/src/main/java/com/example/springcrashcourse/student/StudentRepository.java new file mode 100644 index 0000000..7b24249 --- /dev/null +++ b/src/main/java/com/example/springcrashcourse/student/StudentRepository.java @@ -0,0 +1,9 @@ +package com.example.springcrashcourse.student; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface StudentRepository extends JpaRepository { + +} diff --git a/src/main/java/com/example/springcrashcourse/student/StudentService.java b/src/main/java/com/example/springcrashcourse/student/StudentService.java index b4306c2..4cf27cf 100644 --- a/src/main/java/com/example/springcrashcourse/student/StudentService.java +++ b/src/main/java/com/example/springcrashcourse/student/StudentService.java @@ -4,19 +4,20 @@ import java.time.LocalDate; import java.time.Month; import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class StudentService { + + private final StudentRepository studentRepository; + + @Autowired + public StudentService(StudentRepository studentRepository) { + this.studentRepository = studentRepository; + } + public List getStudents() { - return List.of( - new Student( - 1L, - "Mariam", - "mariam.jamal@gmail.com", - LocalDate.of(2000, Month.JANUARY, 5), - 21 - ) - ); + return studentRepository.findAll(); } } \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e71e1a6..6f6b417 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,8 +1,8 @@ spring.datasource.url=jdbc:postgresql://localhost:5432/student -spring.datasource.username= -spring.datasource.password= +spring.datasource.username=postgres +spring.datasource.password=testing spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.show-sql=true -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgresSQLDialect +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file