Day79. 230822
JPA(Java Persitence API)
: 개발자가 직접 SQL을 작성하지 않아도 자동으로 생성해주는 인터페이스 모음. 인터페이스이므로 구현클래스 필요
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa/3.1.1
build.gradle>
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
build.gradle에 다음을 추가해준다.
추가해주면 gradle에서 reload해준다.(동그라미 화살표 표시)
application.properties>
#JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
다음을 추가해준다.
Lombok설치
setting-plugins에서 Lombok을 install해준다.
Answer.java>
package com.mycom.app.answer.entity;
import com.mycom.app.question.entity.Question;
import jakarta.persistence.*;
import java.time.LocalDateTime;
//Question에 대한 대답(table용)을 관련한 entity
@Entity
public class Answer {
//field
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id; //id(대답pk)
@Column
private String content; //content
@Column
private LocalDateTime createDate; //create_date
@ManyToOne
private Question question;
}
@Entity 어노테이션 추가해주기(jakarta안에 있는 것 import)
@Id, @colum 표시
@ManyToOne
Question하나에 대해 Answer 여러개. 1:다의 관계 (질문 기준)
Question.java>
package com.mycom.app.question.entity;
import com.mycom.app.answer.entity.Answer;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
import java.util.List;
//question 테이블 관련 데이터를 처리하기 위한 클래스
/*
*/
@Getter
@Setter
@Entity
public class Question {
//field
//@Id : pk
//@GeneratedValue : 1씩 자동증가
//GenerationType.IDENTITY : 해당 컬럼만의 독립적인 자동증가번호
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;//글번호. 1씩 증가.pk
//@Column : 컬럼
@Column(length = 200)
private String subject;//제목
@Column(columnDefinition = "TEXT")
private String content;//내용
//필드명이 대소문자 섞인 형태는 _, 컬럼명은 전부 소문자로 처리
@Column
private LocalDateTime createDate;//작성일
/*@OneToMany 속성
mappedBy는 참조 엔티티의 속성명
CascadeType.REMOVE : 질문을 삭제하면 그에 딸린 대답목록도 같이 삭제
*/
@OneToMany(mappedBy = "question",cascade = CascadeType.REMOVE)
private List<Answer> answerList;
//constructor
//method
}
@OneToMany
질문 하나에 대한 대답 여러 개
H2를 실행해보면 ANSWER, QUESTION테이블이 추가된 것을 볼 수 있다.
필드명이 컬럼명이 되었다.
QuestionRepository.java>
package com.mycom.app.question.repository;
import com.mycom.app.question.entity.Question;
import org.springframework.data.jpa.repository.JpaRepository;
//Repository는 Entity에 의하여 생성된 db에 접근하여 작업하는 여러 메서드들로 구성된 interface이다.
//=>CRUD
//JpaRepository인터페이스를 상속하고 있다.
//<Repository의 대상이 되는 Entity타입,Entity타입의 PK타입>
//여기에서는 <Question,Integer> Repository의 대상이 되는 Question의 PK는 Integer
public interface QuestionRepository extends JpaRepository<Question,Integer> {
}
AnswerRepository.java>
package com.mycom.app.answer.repository;
import com.mycom.app.answer.entity.Answer;
import org.springframework.data.jpa.repository.JpaRepository;
//Repository는 Entity에 의하여 생성된 db에 접근하여 작업하는 여러 메서드들로 구성된 interface이다.
//=>CRUD
//JpaRepository인터페이스를 상속하고 있다.
//<Repository의 대상이 되는 Entity타입,Entity타입의 PK타입>
//여기에서는 <Question,Integer> Repository의 대상이 되는 Answer의 PK는 Integer
public interface AnswerRepository extends JpaRepository<Answer,Integer> {
}
AppApplicationTests>
package com.mycom.app;
import com.mycom.app.question.entity.Question;
import com.mycom.app.question.repository.QuestionRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDateTime;
@SpringBootTest
class AppApplicationTests {
@Autowired
private QuestionRepository questionRepository;
@Test
void contextLoads() {
}
@Test
void testJpa(){
//1개의 질문 등록
Question question = new Question();
question.setSubject("질문제목1");
question.setContent("질문내용1");
question.setCreateDate(LocalDateTime.now());
questionRepository.save(question);
//1개의 질문 등록
Question question2 = new Question();
question2.setSubject("질문제목2");
question2.setContent("질문내용2");
question2.setCreateDate(LocalDateTime.now());
questionRepository.save(question2);
}
}
AppApplicationTests Run 한 후 AppApplication Run해서 web server를 올려준다.
H2실행 후 select * from question; 쿼리를 실행해주면 결과 값이 나온다.
'개발 수업 > Spring Boot' 카테고리의 다른 글
[SpringBoot] thymeleaf 타입별 사용법/thymeleaf 템플릿 기능 (0) | 2023.08.24 |
---|---|
[SpringBoot] 목록조회, 상세조회 (0) | 2023.08.24 |
[SpringBoot] 서버 환경설정/H2 Database사용하기 (0) | 2023.08.22 |
[SpringBoot] IntelliJ 설치하기/환경설정 (0) | 2023.08.22 |
[SpringBoot] Eclipse Web devleloper Tools/스프링부트 실행해보기(HTML,jsp) (0) | 2023.08.21 |