홍팍 님의 스프링 부트, 입문! 강의를 보고 작성한 내용이며 이미지 또한 강의에 나오는 이미지를 따라 만들었습니다.
https://www.youtube.com/watch?v=Ym7cAtE2jQs&list=PLyebPLlVYXCiYdYaWRKgCqvnCFrLEANXt&index=29
Create : 사용자의 입력이 DB에 저장되는 과정
Read
Update
Delete
form 데이터 : HTML 문서의 form 태그에 담긴 데이터
어디로 보낼지, 어떻게 보낼지에 대한 정보가 필요
form 데이터는 Controller에게 전달
Controller는 form 데이터를 DTO라는 객체에 담아서 받는다
<form class="container" action = "articles/create" method="post">
templates/articles/new.mustache
생성
어디로 보낼지는 form 태그의 action
속성에 적어준다
어떻게 보낼지는 form 태그의 method
속성에 적어준다
@PostMapping("/articles/create") public String createArticle() { return ""; }
View page를 반환하는 Controller에 새로운 메소드 정의
@PostMapping("articles/create")
method에서 post 방식으로 정보를 보낸다고 했으니 PostMapping 어노테이션 사용
url은 action 속성에 적힌 url 사용
새로운 view 페이지를 생성했기 때문에 이를 보여주는 Controller가 필요
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 + '\'' + '}'; } }
@PostMapping("/articles/create") public String createArticle(ArticleForm form) { System.out.println(form.toString()); return ""; }
기본 패키지에 dto 패키지 생성 및 java class 파일 생성
생성한 파일은 form 데이터를 받아올 그릇이 됨
데이터를 보낸 수만큼의 field가 필요
생성한 DTO를 폼 데이터를 받는 메소드의 파라미터로 넣어준다
mustache의 입력 태그들 안에 name
속성을 작성
이 때 name 속성의 이름은 DTO의 필드명과 동일하게 작성해야 함
자바 언어를 DB가 이해할 수 있게 해주며, 데이터 관리에 편리한 여러 기능을 제공
Entity : 자바 객체(DTO)를 DB 가 이해할 수 있도록 규격화된 데이터
Repository : Entity는 Repository를 통해 DB에 전달되고 처리됨 (DB속 table에 관리)
입력 폼을 보여주는 Controller에서 DTO 객체가 전달되면 수행
DTO를 Entity로 변환
Repository가 Entity를 DB안에 저장하게 함
@Entity // DB가 해당 객체를 인식 가능
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 + '\'' +
'}';
}
}
기본패키지/entity에 클래스 생성
@Entity
: DB에서 Entity라는 것을 인식할 수 있도록 Entity 어노테이션 필요
@Column
: DB 테이블의 열에 해당하는 정보
@Id
: 대푯값을 지정
@GeneratedValue
: 자동 생성을 위한 어노테이션
// Article(Entity) 객체를 반환
public Article toEntity() {
// 생성자 호출
// id는 null값, title과 content는 DTO의 title, content를 사용
return new Article(null, title, content);
}
// JPA에서 제공하는 CRUDRepository 인터페이스를 활용 public interface ArticleRepository extends CrudRepository<Article, Long> { }
기본패키지/repository에 인터페이스 생성
첫 번째 : 관리 대상 Entity
두 번째 : 관리 대상 Entity의 대푯값(기본키)의 타입
@Autowired private ArticleRepository articleRepository;
@Autowired
: 스프링부트가 미리 생성해놓은 객체를 가져다가 자동으로 연결
위 어노테이션이 있기 때문에 repository에 해당하는 객체를 생성하지 않아도 됨
@Controller
public class ArticleController {
@Autowired // 스프링부트가 미리 생성해놓은 객체를 가져다가 자동으로 연결
private ArticleRepository articleRepository;
@GetMapping("/articles/new")
public String newArticleForm() {
return "articles/new";
}
@PostMapping("/articles/create")
public String createArticle(ArticleForm form) {
System.out.println(form.toString());
//1. DTO를 Entity로 변환
Article article = form.toEntity();
System.out.println(article);
//2. Repository가 Entity를 DB안에 저장하게 함
// save()는 CRUDrepository에 기본적으로 정의되어 있음
Article saved = articleRepository.save(article);
System.out.println(saved.toString());
return "";
}
}
spring.h2.console.enabled=true
main/resources/application.propertoes
에 작성
h2 DB, 웹 콘솔 접속 허용
localhost:8080/h2-console
에 접속
JDBC URL : 데이터베이스 접근 주소, 값이 매번 변화
서버를 실행한 결과창에서 jdbc를 검색한 후 해당 주소로 접속