반응형

JPA를 사용하여 게시판을 만들어보자 

 

툴 : 인텔리제이 

데이터베이스 : 마리아디비 

라이브러리 : 스프링 부트 

사용기술 JPA

 

우선 그래들환경에 익숙해지기 위해 좀 해깔렷지만 지금은 조금 익숙해 졌다.

 

 

이런식으로 되어있는데 

우선 Entity는 VO와 비슷한거같다. 

 

우선 Entity를 살펴 보자

 

1) Entity란 ? 

- 데이터베이스 에 필드와 여러 엔티티간 연관관계를 정의 한다 데이터베이스는 엑셀처럼 2차원 테이블이라고 생각하면 된다. 이 테이블에 서비스에서 필요한 정보를 다 저장하고 활용하게 된다. 

 

 

package com.study.board.entity;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
@Data
public class Board {

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) //

    private Integer id;
    private String title;
    private String content;


}

@어노테이션

 

대략적인 어노테이션의 개념만 알도록하자

@Entity : 클래스 위에 선언하여 이클래스가 엔티티임을 알려준다. 이렇게 되면 JPA에서 정의된 필드들을 바탕으로 데이터베이스에 테이블을 만들어준다. 

@data : lombok 각 필드값을 조회할 수있는 getter와 setter를 조회해 준다. 

@id , @GeneratedValue : 해당 엔티티의 주요키가 될 값을 지정해 주는 것이 @Id 이며 @GeneratedValue이 pk이라 자동으로 1씩 증가하게 되는 어노테이션이다. 

 

 

다음 레포지토리를 보자

 

package com.study.board.repository;

import com.study.board.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BoardRepository extends JpaRepository<Board , Integer> {
}

 

2. Repository

- Entity에 의해 생성된 DB에 접근하는 메서드들을 사용하기 위한 인터페이스 이다. 

위에서 엔티티를 선언함으로써 데이터베이스 구조를 만들었다면 여기에 어떤값을 넣거나 넣어진 값을 조회하는 등의 CRUD를 해야 쓸모가 있는데 이것을 어떻게 정의 해주는 계층이다.

 

JpaRepository를 상속받도록 함으로써 기본적인 동작이 모두 가능해진다! JpaRepository는 어떤 엔티티를 메서드의 대상으로 할지를 다음 키워드로 지정한다. JpaRepository<대상으로 지정할 엔티티, 해당 엔티티의 PK의 타입>.

 

이렇게 extends를 통해서 상속받고나면, 해당 레포지토리의 객체를 이용해서 기본적으로 제공되는 메서드(save(), findAll(), get()) 등을 사용할 수 있게 된다.

 

 

3. Service

 

주요 로직을 수행한다.

위에 제네릭으로 JpaRepository를 상속했기 때문에 아래의 메소드를 사용할 수 있다. 

@Service
public class BoardSercie {

    @Autowired
    private BoardRepository boardRepository;

    public void write(Board board){

        boardRepository.save(board);
    }
}

 

4. 컨트롤러

- 뷰에서 받은 파라미터를 service로 넘겨준다. 

 

   @Autowired
   private BoardSercie boardService;

    @GetMapping("/board/write") //localhost:8090/board/write
    public String boardwriteForm(){

        return "boardwrite";
    }

    @PostMapping("/board/writepro")
    public String boardWritePro(Board board){

        boardService.write(board);

        return "";
    }
<body>
    <div class="layout">
        <form action="/board/writepro" method="post">
            <input name="title" type="text">
            <textarea name="content"></textarea>
            <button>작성</button>
        </form>
    </div>
</body>
</html>

 

대략 이런 단순한 게시판이 있다고 해보자 

 

작동 순서

 

1) board form에 name값으로 각각 "content" , "title" 2개를 주었고 id는 자동으로 1씩 증가된다. 

작성을 누르게 되면 위에 action으로 post방식으로 컨트롤러에 던져주게 된다. 

2) 컨트롤러는 제목과 내용을 받아서 서비스로 던져준다. 

3) 서비스에서 레포지토리에서 상속받은 save()를 하여 insert 시킨다. 

 

이정도로 이해하면 될거같다. 

 

 

를 작성해서 데이터 베이스로 넘겨보자

 

id는 자동증가가 되었고 

title과 content 모두 잘 저장 되었다. 

 

https://github.com/MoonSeokHyun/SpringBoot_StudyBoard

 

GitHub - MoonSeokHyun/SpringBoot_StudyBoard

Contribute to MoonSeokHyun/SpringBoot_StudyBoard development by creating an account on GitHub.

github.com

 

반응형

+ Recent posts