diff --git a/build.gradle b/build.gradle index 0cefff2..537619d 100644 --- a/build.gradle +++ b/build.gradle @@ -26,6 +26,7 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-validation' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' diff --git a/src/main/java/doit/jpastudy2/Library/Book.java b/src/main/java/doit/jpastudy2/Library/Book.java new file mode 100644 index 0000000..0ce7b01 --- /dev/null +++ b/src/main/java/doit/jpastudy2/Library/Book.java @@ -0,0 +1,33 @@ +package doit.jpastudy2.Library; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor +public class Book { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long bookId; + private String title; + private String author; + private String publisher; + private String isbn; + private char available; + + @Builder + public Book(String title, String author, String publisher, String isbn, char available) { + this.title = title; + this.author = author; + this.publisher = publisher; + this.isbn = isbn; + this.available = available; + } +} diff --git a/src/main/java/doit/jpastudy2/Library/Member.java b/src/main/java/doit/jpastudy2/Library/Member.java new file mode 100644 index 0000000..74be747 --- /dev/null +++ b/src/main/java/doit/jpastudy2/Library/Member.java @@ -0,0 +1,37 @@ +package doit.jpastudy2.Library; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.validation.constraints.Email; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +@Entity +@Getter +@NoArgsConstructor +public class Member { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long memberId; + private String name; + @Email + private String email; + private String phone; + private LocalDate joinDate; + private Long borrow; + + @Builder + public Member(String name, String email, String phone, LocalDate joinDate, Long borrow) { + this.name = name; + this.email = email; + this.phone = phone; + this.joinDate = joinDate; + this.borrow = borrow; + } +} diff --git a/src/main/java/doit/jpastudy2/Library/repository/BookRepository.java b/src/main/java/doit/jpastudy2/Library/repository/BookRepository.java new file mode 100644 index 0000000..26cf75a --- /dev/null +++ b/src/main/java/doit/jpastudy2/Library/repository/BookRepository.java @@ -0,0 +1,11 @@ +package doit.jpastudy2.Library.repository; + +import doit.jpastudy2.Library.Book; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface BookRepository extends JpaRepository { + + public Book findByTitleAndAuthor(String title, String author); + public Book findByIsbn(String isbn); + +} diff --git a/src/main/java/doit/jpastudy2/Library/repository/MemberRepository.java b/src/main/java/doit/jpastudy2/Library/repository/MemberRepository.java new file mode 100644 index 0000000..bc93f51 --- /dev/null +++ b/src/main/java/doit/jpastudy2/Library/repository/MemberRepository.java @@ -0,0 +1,11 @@ +package doit.jpastudy2.Library.repository; + +import doit.jpastudy2.Library.Member; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MemberRepository extends JpaRepository { + + public Member findByName(String name); + public Member findByEmail(String email); + public Member findByPhone(String phone); +} diff --git a/src/test/java/doit/jpastudy2/Library/repository/BookRepositoryTest.java b/src/test/java/doit/jpastudy2/Library/repository/BookRepositoryTest.java new file mode 100644 index 0000000..958fddf --- /dev/null +++ b/src/test/java/doit/jpastudy2/Library/repository/BookRepositoryTest.java @@ -0,0 +1,32 @@ +package doit.jpastudy2.Library.repository; + +import doit.jpastudy2.Library.Book; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +@SpringBootTest +class BookRepositoryTest { + + @Autowired + BookRepository bookRepository; + + @Test + void test(){ + Book book = Book.builder() + .title("모순") + .author("양귀자") + .isbn("9788998441012") + .publisher("쓰다") + .build(); + + bookRepository.save(book); + + Book book1 = bookRepository.findByTitleAndAuthor("모순","양귀자"); + + System.out.println("Member Id = " + book1.getBookId()); + } + +} \ No newline at end of file diff --git a/src/test/java/doit/jpastudy2/Library/repository/MemberRepositoryTest.java b/src/test/java/doit/jpastudy2/Library/repository/MemberRepositoryTest.java new file mode 100644 index 0000000..4312e30 --- /dev/null +++ b/src/test/java/doit/jpastudy2/Library/repository/MemberRepositoryTest.java @@ -0,0 +1,36 @@ +package doit.jpastudy2.Library.repository; + +import doit.jpastudy2.Library.Member; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +import static org.junit.jupiter.api.Assertions.*; + +@Transactional +@SpringBootTest +class MemberRepositoryTest { + + @Autowired + MemberRepository memberRepository; + + @Test + void test(){ + Member member = Member.builder() + .name("문소현") + .email("sohyun22@ajou.ac.kr") + .phone("01012345678") + .joinDate(LocalDate.now()) + .build(); + + memberRepository.save(member); + + Member member1 = memberRepository.findByName("문소현"); + + System.out.println("name = " + member1.getEmail()); + } +} \ No newline at end of file