From b1b4033a404ad155fa5a9549648d4cad833e4c5e Mon Sep 17 00:00:00 2001 From: TuMyP1985 Date: Mon, 24 Jan 2022 18:58:36 +0300 Subject: [PATCH 1/3] 1 v --- pom.xml | 8 +++++++ .../java/ru/javaops/bootjava/model/Role.java | 6 +++++ .../java/ru/javaops/bootjava/model/User.java | 23 +++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 src/main/java/ru/javaops/bootjava/model/Role.java create mode 100644 src/main/java/ru/javaops/bootjava/model/User.java diff --git a/pom.xml b/pom.xml index ca66a72..5be7a42 100644 --- a/pom.xml +++ b/pom.xml @@ -53,6 +53,14 @@ org.springframework.boot spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + diff --git a/src/main/java/ru/javaops/bootjava/model/Role.java b/src/main/java/ru/javaops/bootjava/model/Role.java new file mode 100644 index 0000000..432dde8 --- /dev/null +++ b/src/main/java/ru/javaops/bootjava/model/Role.java @@ -0,0 +1,6 @@ +package ru.javaops.bootjava.model; + +public enum Role { + ROLE_USER, + ROLE_ADMIN +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/bootjava/model/User.java b/src/main/java/ru/javaops/bootjava/model/User.java new file mode 100644 index 0000000..b475761 --- /dev/null +++ b/src/main/java/ru/javaops/bootjava/model/User.java @@ -0,0 +1,23 @@ +package ru.javaops.bootjava.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Set; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class User { + + private String email; + + private String firstName; + + private String lastName; + + private String password; + + private Set roles; +} \ No newline at end of file From 13ac10a3deaecf2a53d2f99430e6c4726a3393eb Mon Sep 17 00:00:00 2001 From: TuMyP1985 Date: Mon, 24 Jan 2022 19:33:14 +0300 Subject: [PATCH 2/3] 2 v --- .gitignore | 3 +- 2_01_data_jpa.patch | 148 ++++++++++++++++++ pom.xml | 6 +- .../bootjava/RestaurantVotingApplication.java | 17 +- .../java/ru/javaops/bootjava/model/User.java | 7 +- .../bootjava/repository/UserRepository.java | 7 + src/main/resources/application.properties | 18 +++ 7 files changed, 202 insertions(+), 4 deletions(-) create mode 100644 2_01_data_jpa.patch create mode 100644 src/main/java/ru/javaops/bootjava/repository/UserRepository.java diff --git a/.gitignore b/.gitignore index a5d9a78..1a131c7 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ HELP.md .idea *.iws *.iml -*.ipr \ No newline at end of file +*.ipr +/1_01_user_with_lombok.patch diff --git a/2_01_data_jpa.patch b/2_01_data_jpa.patch new file mode 100644 index 0000000..1e749cf --- /dev/null +++ b/2_01_data_jpa.patch @@ -0,0 +1,148 @@ +Index: src/main/java/ru/javaops/bootjava/repository/UserRepository.java +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +--- src/main/java/ru/javaops/bootjava/repository/UserRepository.java (date 1606213467289) ++++ src/main/java/ru/javaops/bootjava/repository/UserRepository.java (date 1606213467289) +@@ -0,0 +1,7 @@ ++package ru.javaops.bootjava.repository; ++ ++import org.springframework.data.jpa.repository.JpaRepository; ++import ru.javaops.bootjava.model.User; ++ ++public interface UserRepository extends JpaRepository { ++} +\ No newline at end of file +Index: src/main/java/ru/javaops/bootjava/model/User.java +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +--- src/main/java/ru/javaops/bootjava/model/User.java (revision 530c4e3c5d642911ba4cd5bcc0ed8938c3690a6d) ++++ src/main/java/ru/javaops/bootjava/model/User.java (date 1606213467285) +@@ -1,23 +1,44 @@ + package ru.javaops.bootjava.model; + +-import lombok.AllArgsConstructor; +-import lombok.Data; +-import lombok.NoArgsConstructor; ++import lombok.*; ++import org.springframework.data.jpa.domain.AbstractPersistable; + ++import javax.persistence.*; ++import javax.validation.constraints.Email; ++import javax.validation.constraints.NotEmpty; ++import javax.validation.constraints.Size; + import java.util.Set; + +-@Data +-@NoArgsConstructor ++@Entity ++@Table(name = "users") ++@Getter ++@Setter ++@NoArgsConstructor(access = AccessLevel.PROTECTED) + @AllArgsConstructor +-public class User { ++@ToString(callSuper = true, exclude = {"password"}) ++public class User extends AbstractPersistable { + ++ @Column(name = "email", nullable = false, unique = true) ++ @Email ++ @NotEmpty ++ @Size(max = 128) + private String email; + ++ @Column(name = "first_name") ++ @Size(max = 128) + private String firstName; + ++ @Column(name = "last_name") ++ @Size(max = 128) + private String lastName; + ++ @Column(name = "password") ++ @Size(max = 256) + private String password; + ++ @Enumerated(EnumType.STRING) ++ @CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "role"}, name = "user_roles_unique")}) ++ @Column(name = "role") ++ @ElementCollection(fetch = FetchType.EAGER) + private Set roles; + } +\ No newline at end of file +Index: pom.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +--- pom.xml (revision 530c4e3c5d642911ba4cd5bcc0ed8938c3690a6d) ++++ pom.xml (date 1606213518079) +@@ -28,6 +28,10 @@ + org.springframework.boot + spring-boot-starter-web + ++ ++ org.springframework.boot ++ spring-boot-starter-validation ++ + + + com.h2database +Index: src/main/java/ru/javaops/bootjava/RestaurantVotingApplication.java +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +--- src/main/java/ru/javaops/bootjava/RestaurantVotingApplication.java (revision 530c4e3c5d642911ba4cd5bcc0ed8938c3690a6d) ++++ src/main/java/ru/javaops/bootjava/RestaurantVotingApplication.java (date 1606213548848) +@@ -1,14 +1,29 @@ + package ru.javaops.bootjava; + + import lombok.AllArgsConstructor; ++import org.springframework.boot.ApplicationArguments; ++import org.springframework.boot.ApplicationRunner; + import org.springframework.boot.SpringApplication; + import org.springframework.boot.autoconfigure.SpringBootApplication; ++import ru.javaops.bootjava.model.Role; ++import ru.javaops.bootjava.model.User; ++import ru.javaops.bootjava.repository.UserRepository; ++ ++import java.util.Set; + + @SpringBootApplication + @AllArgsConstructor +-public class RestaurantVotingApplication { ++public class RestaurantVotingApplication implements ApplicationRunner { ++ private final UserRepository userRepository; + + public static void main(String[] args) { + SpringApplication.run(RestaurantVotingApplication.class, args); + } ++ ++ @Override ++ public void run(ApplicationArguments args) { ++ userRepository.save(new User("user@gmail.com", "User_First", "User_Last", "password", Set.of(Role.ROLE_USER))); ++ userRepository.save(new User("admin@javaops.ru", "Admin_First", "Admin_Last", "admin", Set.of(Role.ROLE_USER, Role.ROLE_ADMIN))); ++ System.out.println(userRepository.findAll()); ++ } + } +Index: src/main/resources/application.properties +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +--- src/main/resources/application.properties (revision 530c4e3c5d642911ba4cd5bcc0ed8938c3690a6d) ++++ src/main/resources/application.properties (date 1606213518073) +@@ -1,0 +1,9 @@ ++# https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html ++# JPA ++spring.jpa.show-sql=true ++spring.jpa.open-in-view=false ++# http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#configurations ++spring.jpa.properties.hibernate.default_batch_fetch_size=20 ++spring.jpa.properties.hibernate.format_sql=true ++# https://stackoverflow.com/questions/21257819/what-is-the-difference-between-hibernate-jdbc-fetch-size-and-hibernate-jdbc-batc ++spring.jpa.properties.hibernate.jdbc.batch_size=20 diff --git a/pom.xml b/pom.xml index 5be7a42..0db3930 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-validation + com.h2database @@ -52,7 +56,7 @@ org.springframework.boot - spring-boot-maven-plugin + diff --git a/src/main/java/ru/javaops/bootjava/RestaurantVotingApplication.java b/src/main/java/ru/javaops/bootjava/RestaurantVotingApplication.java index 3326420..61d8ff8 100644 --- a/src/main/java/ru/javaops/bootjava/RestaurantVotingApplication.java +++ b/src/main/java/ru/javaops/bootjava/RestaurantVotingApplication.java @@ -1,14 +1,29 @@ package ru.javaops.bootjava; import lombok.AllArgsConstructor; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import ru.javaops.bootjava.model.Role; +import ru.javaops.bootjava.model.User; +import ru.javaops.bootjava.repository.UserRepository; + +import java.util.Set; @SpringBootApplication @AllArgsConstructor -public class RestaurantVotingApplication { +public class RestaurantVotingApplication implements ApplicationRunner { + private final UserRepository userRepository; public static void main(String[] args) { SpringApplication.run(RestaurantVotingApplication.class, args); } + + @Override + public void run(ApplicationArguments args) { + userRepository.save(new User("user@gmail.com", "User_First", "User_Last", "password", Set.of(Role.ROLE_USER))); + userRepository.save(new User("admin@javaops.ru", "Admin_First", "Admin_Last", "admin", Set.of(Role.ROLE_USER, Role.ROLE_ADMIN))); + System.out.println(userRepository.findAll()); + } } diff --git a/src/main/java/ru/javaops/bootjava/model/User.java b/src/main/java/ru/javaops/bootjava/model/User.java index b475761..3dbd5f6 100644 --- a/src/main/java/ru/javaops/bootjava/model/User.java +++ b/src/main/java/ru/javaops/bootjava/model/User.java @@ -3,13 +3,18 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.data.jpa.domain.AbstractPersistable; +import javax.persistence.Entity; +import javax.persistence.Table; import java.util.Set; +@Entity +@Table(name = "users") @Data @NoArgsConstructor @AllArgsConstructor -public class User { +public class User extends AbstractPersistable { private String email; diff --git a/src/main/java/ru/javaops/bootjava/repository/UserRepository.java b/src/main/java/ru/javaops/bootjava/repository/UserRepository.java new file mode 100644 index 0000000..590c614 --- /dev/null +++ b/src/main/java/ru/javaops/bootjava/repository/UserRepository.java @@ -0,0 +1,7 @@ +package ru.javaops.bootjava.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import ru.javaops.bootjava.model.User; + +public interface UserRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e69de29..b9e41ef 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -0,0 +1,18 @@ +# https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +# JPA +spring.jpa.show-sql=true +spring.jpa.open-in-view=false +# http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#configurations +spring.jpa.properties.hibernate.default_batch_fetch_size=20 +spring.jpa.properties.hibernate.format_sql=true +# https://stackoverflow.com/questions/21257819/what-is-the-difference-between-hibernate-jdbc-fetch-size-and-hibernate-jdbc-batc +spring.jpa.properties.hibernate.jdbc.batch_size=20 +# https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +# JPA +spring.jpa.show-sql=true +spring.jpa.open-in-view=false +# http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#configurations +spring.jpa.properties.hibernate.default_batch_fetch_size=20 +spring.jpa.properties.hibernate.format_sql=true +# https://stackoverflow.com/questions/21257819/what-is-the-difference-between-hibernate-jdbc-fetch-size-and-hibernate-jdbc-batc +spring.jpa.properties.hibernate.jdbc.batch_size=20 From 99f642e67ea3c8d70f7c14274304a8d25a085306 Mon Sep 17 00:00:00 2001 From: TuMyP1985 Date: Mon, 24 Jan 2022 19:36:59 +0300 Subject: [PATCH 3/3] 2 v --- .../java/ru/javaops/bootjava/model/User.java | 2 - src/main/resources/application.properties | 45 +++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/javaops/bootjava/model/User.java b/src/main/java/ru/javaops/bootjava/model/User.java index 3dbd5f6..423a5c1 100644 --- a/src/main/java/ru/javaops/bootjava/model/User.java +++ b/src/main/java/ru/javaops/bootjava/model/User.java @@ -9,8 +9,6 @@ import javax.persistence.Table; import java.util.Set; -@Entity -@Table(name = "users") @Data @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b9e41ef..efaca83 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -16,3 +16,48 @@ spring.jpa.properties.hibernate.default_batch_fetch_size=20 spring.jpa.properties.hibernate.format_sql=true # https://stackoverflow.com/questions/21257819/what-is-the-difference-between-hibernate-jdbc-fetch-size-and-hibernate-jdbc-batc spring.jpa.properties.hibernate.jdbc.batch_size=20 +# https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +# JPA +spring.jpa.show-sql=true +spring.jpa.open-in-view=false +# http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#configurations +spring.jpa.properties.hibernate.default_batch_fetch_size=20 +spring.jpa.properties.hibernate.format_sql=true +# https://stackoverflow.com/questions/21257819/what-is-the-difference-between-hibernate-jdbc-fetch-size-and-hibernate-jdbc-batc +spring.jpa.properties.hibernate.jdbc.batch_size=20 +# https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +# JPA +spring.jpa.show-sql=true +spring.jpa.open-in-view=false +# http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#configurations +spring.jpa.properties.hibernate.default_batch_fetch_size=20 +spring.jpa.properties.hibernate.format_sql=true +# https://stackoverflow.com/questions/21257819/what-is-the-difference-between-hibernate-jdbc-fetch-size-and-hibernate-jdbc-batc +spring.jpa.properties.hibernate.jdbc.batch_size=20 +# https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +# JPA +spring.jpa.show-sql=true +spring.jpa.open-in-view=false +# http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#configurations +spring.jpa.properties.hibernate.default_batch_fetch_size=20 +spring.jpa.properties.hibernate.format_sql=true +# https://stackoverflow.com/questions/21257819/what-is-the-difference-between-hibernate-jdbc-fetch-size-and-hibernate-jdbc-batc +spring.jpa.properties.hibernate.jdbc.batch_size=20 +# https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +# JPA +spring.jpa.show-sql=true +spring.jpa.open-in-view=false +# http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#configurations +spring.jpa.properties.hibernate.default_batch_fetch_size=20 +spring.jpa.properties.hibernate.format_sql=true +# https://stackoverflow.com/questions/21257819/what-is-the-difference-between-hibernate-jdbc-fetch-size-and-hibernate-jdbc-batc +spring.jpa.properties.hibernate.jdbc.batch_size=20 +# https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +# JPA +spring.jpa.show-sql=true +spring.jpa.open-in-view=false +# http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#configurations +spring.jpa.properties.hibernate.default_batch_fetch_size=20 +spring.jpa.properties.hibernate.format_sql=true +# https://stackoverflow.com/questions/21257819/what-is-the-difference-between-hibernate-jdbc-fetch-size-and-hibernate-jdbc-batc +spring.jpa.properties.hibernate.jdbc.batch_size=20