시작전에, 데이터베이스 설정
일단 지금은 테스트를 위해, 인메모리 데이터베이스인 H2 데이터베이스를 사용한다,
H2 데이터베이스는 프로젝트 시작할 때 install을 해주었으며, 간단하게 설정해 줄 수 잇다.
src > main > resources > application.properties 파일에 다음 아래의 명러어 3개를 입력하면 끝!
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.jpa.show-sql=true
http://localhost:8080/h2-console 접속 - url에 testdb url에 입력!
Spring은 Controller, Service, Repository 3개의 레이어로 나누어지는데,
오늘은, Repository 레이어, 즉 데이터 처리 관련된 부분을 정리해보자.
1. 우선 JPA
JPA란,
SQL 쿼리문을 사용하지 않고 데이터를 생성, 조회.수정, 삭제할 수 있도록 해주는 번역기 입니다. (JPA ORM 이라고도 함)
ORM 이란, (Object Relational Mapping) 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말합니다.
따라서, Spring은 JPA라는 ORM기능을 제공하는데, JPA를 사용함으로써, 개발자가 더욱 더 쉽게(쿼리문을 사용하지 않고) 데이터를 처리할 수 있도록 해준다.
2. JPA 사용하기
JPA는 관계형 데이터베이스(RDBMS)와 실제 데이터를 매핑시켜주는 역할을 해주기 때문에, 먼저 데이터를 담을 그룻, 테이블이 필요하겠죠?
Spring에서 "테이블" = "Domain" / "SQL" = Repository 입니다.
Domain, Repository 설정하기
1. src > main > java > com.sparta.item01 에 domain 이라는 패키지를 만듭니다.
2. Lecture.java, LectureRepository.java 파일을 만듭니다.
- Lecture 는 테이블
- LectureRepository는 Lecture 테이블에 1대1로 매핑되는, Repository 입니다.
Lecture 라는 테이블을 만들고, 이 테이블을 SQL처럼 이용하기 위해 JPARepository라는 SQL을 사용할 수 있도록 해주는 패키지를 이용하는 것입니다.
Lecture.java
- @Entity : 어노테이션을 정의해 줌으로써, Lecture Class가 테이블임을 명시하는 것입니다.
- 그외에, @Id, @GeneratiedValue(=auto increament), @Column 등을 이용하여 최대한 테이블에 가깝게 사용할 수 있도록 해줍니다.
- 이 클래스는 일정의 Model이고, Repository 레이어 안에서 제어됩니다.
@Entity // 테이블임을 나타냅니다.
public class Lecture {
public Lecture() {}
@Id // ID 값, Primary Key로 사용하겠다는 뜻입니다.
@GeneratedValue(strategy = GenerationType.AUTO) // 자동 증가 명령입니다.
private Long id;
@Column(nullable = false) // 컬럼 값이고 반드시 값이 존재해야 함을 나타냅니다.
private String title;
@Column(nullable = false)
private String tutor;
public Long getId() {
return id;
}
public String getTitle() {
return this.title;
}
public String getTutor() {
return this.tutor;
}
public Lecture(String title, String tutor) {
this.title = title;
this.tutor = tutor;
}
}
LectureRepository.java
- SQL문을 사용하지 않고, 데이터를 조작할 수 있도록 JPA기능을 사용하는 인터페이스 입니다.
- interface로 파일을 만들어야합니다.
- SQL조작 기능이 정의되어있는 JpaRepository를 상속받아 개발자가 기능을 사용할 수 있도록 합니다.
- Repository 인터페이스는 도메인과 1대1 매핑입니다.
public interface LectureRepository extends JpaRepository<Lecture, Long> {
}
JPA 사용해보기
// item01Application.java 의 main 함수 아래에 붙여주세요.
@Bean
public CommandLineRunner demo(LectureRepository lectureRepository) {
return (args) -> {
Lecture course = new Lecture("웹개발의 봄", "남병관");
lectureRepository.save(course);
lectureRepository.findAll();
};
}
JPA를 사용하기위한 테스트코드이다.
요롷게 LectorRepository를 이용하여 데이터를 찾고, 저장할 수 있다.
실제로 이요할 때는, 이렇게 사용하지 않고, Service와 맞물려서 사용된다. ( 요건 다음에)
@Bean 어노테이션
- 이거 머지..? 내일 알아바야지...ㅠ
'Spring > Spring Boot' 카테고리의 다른 글
[Spring] 05. JPA - CRUD (Spring Service layer) (0) | 2021.11.11 |
---|---|
[Spring] 04. 데이터베이스 생성, 수정시간 자동 생성 클래스 만들기 (Timestamped 상속 테이블) (0) | 2021.11.10 |
[Spring Boot] 02. Java에서 어노테이션(Annotation) 이란? (미완) (0) | 2021.11.04 |
[IntelliJ] 01. Spring 부트 프로젝트 세팅하기 (0) | 2021.11.04 |
Spring 이란 - 스프링 VS 스프링 부트 (0) | 2021.11.03 |