From 7e5907087bb26a522b07c69d2a82e5cdb672d24b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=9E=D1=80=D1=83=D0=B4=D0=B6=D0=B5=D0=B2?= Date: Fri, 14 May 2021 21:46:23 +0400 Subject: [PATCH] 2021-03 spring-13-data-jpa added --- 2021-03/spring-13-data-jpa/.gitignore | 4 ++ 2021-03/spring-13-data-jpa/pom.xml | 17 ++++++ .../spring-13-exercise/.gitignore | 4 ++ .../spring-13-exercise/pom.xml | 50 +++++++++++++++++ .../main/java/ru/otus/springdata/Main.java | 22 ++++++++ .../java/ru/otus/springdata/domain/Email.java | 21 +++++++ .../ru/otus/springdata/domain/Person.java | 26 +++++++++ .../repository/EmailRepository.java | 4 ++ .../repository/PersonRepository.java | 4 ++ .../spring-13-solution/.gitignore | 4 ++ .../spring-13-solution/pom.xml | 55 +++++++++++++++++++ .../main/java/ru/otus/springdata/Main.java | 48 ++++++++++++++++ .../java/ru/otus/springdata/domain/Email.java | 27 +++++++++ .../ru/otus/springdata/domain/Person.java | 30 ++++++++++ .../repository/EmailRepository.java | 21 +++++++ .../repository/PersonRepository.java | 16 ++++++ 16 files changed, 353 insertions(+) create mode 100644 2021-03/spring-13-data-jpa/.gitignore create mode 100644 2021-03/spring-13-data-jpa/pom.xml create mode 100644 2021-03/spring-13-data-jpa/spring-13-exercise/.gitignore create mode 100644 2021-03/spring-13-data-jpa/spring-13-exercise/pom.xml create mode 100644 2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/Main.java create mode 100644 2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/domain/Email.java create mode 100644 2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/domain/Person.java create mode 100644 2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/repository/EmailRepository.java create mode 100644 2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/repository/PersonRepository.java create mode 100644 2021-03/spring-13-data-jpa/spring-13-solution/.gitignore create mode 100644 2021-03/spring-13-data-jpa/spring-13-solution/pom.xml create mode 100644 2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/Main.java create mode 100644 2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/domain/Email.java create mode 100644 2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/domain/Person.java create mode 100644 2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/repository/EmailRepository.java create mode 100644 2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/repository/PersonRepository.java diff --git a/2021-03/spring-13-data-jpa/.gitignore b/2021-03/spring-13-data-jpa/.gitignore new file mode 100644 index 00000000..e62c33c2 --- /dev/null +++ b/2021-03/spring-13-data-jpa/.gitignore @@ -0,0 +1,4 @@ +.idea/ +*.iml + +target/ diff --git a/2021-03/spring-13-data-jpa/pom.xml b/2021-03/spring-13-data-jpa/pom.xml new file mode 100644 index 00000000..da37d94f --- /dev/null +++ b/2021-03/spring-13-data-jpa/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + ru.otus + spring-13-data-jpa + 1.0 + + pom + + + spring-13-exercise + spring-13-solution + + diff --git a/2021-03/spring-13-data-jpa/spring-13-exercise/.gitignore b/2021-03/spring-13-data-jpa/spring-13-exercise/.gitignore new file mode 100644 index 00000000..e62c33c2 --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-exercise/.gitignore @@ -0,0 +1,4 @@ +.idea/ +*.iml + +target/ diff --git a/2021-03/spring-13-data-jpa/spring-13-exercise/pom.xml b/2021-03/spring-13-data-jpa/spring-13-exercise/pom.xml new file mode 100644 index 00000000..5f36b7ef --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-exercise/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + ru.otus + spring-13-exercise + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 2.4.5 + + + + 11 + 11 + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.h2database + h2 + + + org.projectlombok + lombok + true + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/Main.java b/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/Main.java new file mode 100644 index 00000000..59a032bd --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/Main.java @@ -0,0 +1,22 @@ +package ru.otus.springdata; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; +//import ru.otus.spring10.repostory.PersonRepository; + + +@SpringBootApplication +public class Main { + + public static void main(String[] args) { + ConfigurableApplicationContext context = SpringApplication.run(Main.class); + //PersonRepository personRepository = context.getBean(PersonRepository.class); + //EmailRepository emailRepository = context.getBean(EmailRepository.class); + + // personRepository.save(new Person("Pushkin")); + // personRepository.save(new Person("Lermontov")); + } + + +} diff --git a/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/domain/Email.java b/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/domain/Email.java new file mode 100644 index 00000000..5cb61fa0 --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/domain/Email.java @@ -0,0 +1,21 @@ +package ru.otus.springdata.domain; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Email { + + private long id; + + private String address; + + public Email(String address) { + this.address = address; + } + +} diff --git a/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/domain/Person.java b/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/domain/Person.java new file mode 100644 index 00000000..cc8e6d0a --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/domain/Person.java @@ -0,0 +1,26 @@ +package ru.otus.springdata.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +public class Person { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + private String name; + + public Person(String name) { + this.name = name; + } +} diff --git a/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/repository/EmailRepository.java b/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/repository/EmailRepository.java new file mode 100644 index 00000000..f0f5424f --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/repository/EmailRepository.java @@ -0,0 +1,4 @@ +package ru.otus.springdata.repository; + +public interface EmailRepository { +} diff --git a/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/repository/PersonRepository.java b/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/repository/PersonRepository.java new file mode 100644 index 00000000..a084d42a --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-exercise/src/main/java/ru/otus/springdata/repository/PersonRepository.java @@ -0,0 +1,4 @@ +package ru.otus.springdata.repository; + +public interface PersonRepository { +} diff --git a/2021-03/spring-13-data-jpa/spring-13-solution/.gitignore b/2021-03/spring-13-data-jpa/spring-13-solution/.gitignore new file mode 100644 index 00000000..e62c33c2 --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-solution/.gitignore @@ -0,0 +1,4 @@ +.idea/ +*.iml + +target/ diff --git a/2021-03/spring-13-data-jpa/spring-13-solution/pom.xml b/2021-03/spring-13-data-jpa/spring-13-solution/pom.xml new file mode 100644 index 00000000..5bc2c71d --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-solution/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + ru.otus + spring-13-solution + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 2.4.5 + + + + 11 + 11 + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.h2database + h2 + + + org.springframework.boot + spring-boot-starter-test + test + + + org.projectlombok + lombok + true + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/Main.java b/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/Main.java new file mode 100644 index 00000000..1e634ab6 --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/Main.java @@ -0,0 +1,48 @@ +package ru.otus.springdata; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; +import ru.otus.springdata.domain.Email; +import ru.otus.springdata.domain.Person; +import ru.otus.springdata.repository.EmailRepository; +import ru.otus.springdata.repository.PersonRepository; + +@SpringBootApplication +public class Main { + + public static void main(String[] args) { + ConfigurableApplicationContext context = SpringApplication.run(Main.class); + PersonRepository personRepository = context.getBean(PersonRepository.class); + EmailRepository emailRepository = context.getBean(EmailRepository.class); + + Email emailP = new Email("alex@pushkin.ru"); + emailP = emailRepository.save(emailP); + + Email emailL = new Email("michail@lermontov.ru"); + emailL = emailRepository.save(emailL); + + personRepository.save(new Person("Pushkin", emailP)); + personRepository.save(new Person("Lermontov",emailL)); + + System.out.println("\n\nИщем Пушкина"); + personRepository.findByName("Pushkin").ifPresent(System.out::println); + + System.out.println("\n\nИщем всех пёрсонов"); + System.out.println(emailRepository.findAll()); + + System.out.println("\n\nИщем Пушкина по его почте"); + personRepository.findByEmailAddress("alex@pushkin.ru").ifPresent(System.out::println); + + System.out.println("\n\nИщем почту Пушкина"); + emailRepository.findByEmailAddress("alex@pushkin.ru").ifPresent(System.out::println); + + System.out.println("\n\nОбновляем почту Лермонтову"); + System.out.println("До обновления: " + emailL); + emailRepository.updateEmailById(emailL.getId(), "michail1984@lermontov.ru"); + emailRepository.findById(emailL.getId()).ifPresent(e -> System.out.println("После обновления: " + e)); + + System.out.println("\n\n"); + + } +} diff --git a/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/domain/Email.java b/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/domain/Email.java new file mode 100644 index 00000000..e3b8d344 --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/domain/Email.java @@ -0,0 +1,27 @@ +package ru.otus.springdata.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +public class Email { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + private String address; + + public Email(String address) { + this.address = address; + } +} diff --git a/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/domain/Person.java b/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/domain/Person.java new file mode 100644 index 00000000..e24e42aa --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/domain/Person.java @@ -0,0 +1,30 @@ +package ru.otus.springdata.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +public class Person { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + private String name; + + @OneToOne(orphanRemoval = true) + @JoinColumn(name = "email_id") + private Email email; + + public Person(String name, Email email) { + this.name = name; + this.email = email; + } + +} diff --git a/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/repository/EmailRepository.java b/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/repository/EmailRepository.java new file mode 100644 index 00000000..66b4da80 --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/repository/EmailRepository.java @@ -0,0 +1,21 @@ +package ru.otus.springdata.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; +import ru.otus.springdata.domain.Email; + +import java.util.Optional; + +public interface EmailRepository extends JpaRepository { + + @Query("select e from Email e where e.address = :address") + Optional findByEmailAddress(@Param("address") String email); + + @Modifying + @Transactional + @Query("update Email e set e.address = :address where e.id = :id") + void updateEmailById(@Param("id") long id, @Param("address") String address); +} diff --git a/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/repository/PersonRepository.java b/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/repository/PersonRepository.java new file mode 100644 index 00000000..8f41f889 --- /dev/null +++ b/2021-03/spring-13-data-jpa/spring-13-solution/src/main/java/ru/otus/springdata/repository/PersonRepository.java @@ -0,0 +1,16 @@ +package ru.otus.springdata.repository; + +import org.springframework.data.repository.CrudRepository; +import ru.otus.springdata.domain.Person; + +import java.util.List; +import java.util.Optional; + +public interface PersonRepository extends CrudRepository { + + List findAll(); + + Optional findByName(String s); + + Optional findByEmailAddress(String email); +}