DB에 데이터를 기록하기 위해서는 자바언어로는 이해하지 못한다.
DB는 SQL이라는 언어를 사용하기 때문이다.
DB에 어떻게 자바 언어를 내릴 수 있나? 바로 JPA(JAVA PERSISTENCE API) - 자바언어로 DB명령을 내리는 도구가 필요하다.
데이터를 객체 지향적으로 관리할 수 있게 해준다.
JPA 의 핵심 도구는
Entity와 Repository가 있다.
Entity는 자바객체를 DB가 이해할 수 있게 만든 것으로, 이를 기반으로 테이블이 만들어진다.
Repository는 엔티티가 DB 속 테이블에 저장 및 관리될 수 있게 하는 인터페이스이다.
그리하여, 과정을 얘기하자면 DTO를 Entity로 변환하고 이를 Repository를 이용해 Entity를 DB에 저장하게 하여야한다.
항상 내 것으로 만들기 위해서는 복습이 중요하다.
처음부터 다시 구상해보자.
1. 뷰페이지를 만든다.
- 뷰 페이지: 하나의 틀 templete 로 만들어 두고, 여기에 변수를 삽입해 서로 다른 페이지를 보여주는 기술.
- mvc 패턴: 화면에 보여주고, 클라이언트의 요청을 받아 처리하고, 데이터를 관리하는 역할을 영역별로 나누어 하는 기법.
(model-view-controller pattern)
- 뷰 템플릿의 생성 위치는 src>main>resources>templetes 디렉터리에 만듦.
- 머스태치 mustache 뷰 템플릿 확장자는 mustache임.
* 페이지의 실행 흐름
- 클라이언트가 url라는 요청을 주면 controller가 요청을 받음.
> 요청에 해당하는 메서드 수행 > 뷰 템플릿 페이지에서 사용할 변수를 등록하기 위해 모델 객체를 매개변수로 가져옴.
> 모델에서 사용할 변수 등록 > 변수값에 따라 서로 다른 뷰 템플릿 출력
> return 에는 파일 이름만을 작성하면 되는데, 서버가 알아서 src>main>resources>templetes 디렉터리에 있는 뷰 템플릿 페이지를 찾아 브라우저로 전송해줌.
* 페이지를 레이아웃에 따라 나누어서 설계 가능함.
> 템플릿 파일 안에 layouts 이라는 폴더 생성 후, header와 footer 생성
> {{/layouts>header}} 이런식으로 접근 가능.
@GetMapping("url")
public String function(Model model) {
model.addAttribute("name","name");
return"mustachefileName";
}
2. 컨트롤러 만들기
3. DTO를 만들기
- DTO란 데이터를 담아둘 그릇이라고 생각하면 쉬움.
- 폼 데이터를 실어 보낸 데이터는 서버의 컨트롤러가 객체에 담아 냄.
- 이 객체를 DTO라고 함. DTO로 받은 데이터는 최종적으로 DB에 저장됨.
package com.example.firstproject.dto;
import com.example.firstproject.entity.Article;
public class ArticleForm {
private String title;
private String content;
public ArticleForm(String title, String content) {
this.title = title;
this.content = content;
}
@Override
public String toString() {
return "ArticleForm{" +
"title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
public Article toEntity() {
return new Article(null,title,content);
}
}
* JPA 도구: 핵심 도구로 엔티티와 레퍼지토리가 있음.
4. Entity를 만들기
- Entity는 데이터를 자바 객체로 만들기 위한 것.
package com.example.firstproject.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
@Entity
public class Article {
@Id // 엔티티의 대푯값 지정
@GeneratedValue // 자동 생성 기능
private Long id;
@Column
private String title;
@Column
private String content;
// 객체의 생성 및 초기화를 위해 생성자 추가
public Article(Long id, String title, String content) {
this.id = id;
this.title = title;
this.content = content;
}
@Override
public String toString() {
return "Article{" +
"id=" + id +
", title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
}
5. repository 를 만들기.
- Repository Entity가 DB 속 테이블에 저장 관리 될수 있게 하는 인터페이스
> 인터페이스로 선언해야함.
package com.example.firstproject.repository;
import com.example.firstproject.entity.Article;
import org.springframework.data.repository.CrudRepository;
public interface ArticleRepository extends CrudRepository<Article, Long>{
}
CrudRepository 속에는 아래와 같은 메서드 들이 있음.
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity);
<S extends T> Iterable<S> saveAll(Iterable<S> entities);
Optional<T> findById(ID id);
boolean existsById(ID id);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> ids);
long count();
void deleteById(ID id);
void delete(T entity);
void deleteAllById(Iterable<? extends ID> ids);
void deleteAll(Iterable<? extends T> entities);
void deleteAll();
}
1. 폼데이터를 받는 객체인 DTO
2. DTO가 엔티티로 변환돼 저장
3. 리파지터리가 엔티티를 DB에 저장해 saved 라는 엔티티변수에 봔환.
'코딩 공부 > Spirngboot' 카테고리의 다른 글
[단일, 리스트 데이터 조회] 회원가입 조회 (0) | 2025.01.11 |
---|---|
[Data조회과정과 생성과정] (0) | 2025.01.11 |
[DTO 실습] (0) | 2025.01.10 |
[MVC패턴] 기본 개념 (0) | 2025.01.08 |
[spring initializr] 시작 세팅 (0) | 2024.12.31 |