날아라김지원
article thumbnail

- DB테이블과 SQL(레포지토리에서 데이터베이스로)

위 그림과 같이 Repository에서 Database로 넘어가는 과정을 확인해 본다.

http://localhost:8080/articles/new 페이지로 들어가 글 작성후 Submit을 누르면 아래와 같이

 

인텔리제이 콘솔창에서 확인할 수 있다.

그리고 이걸 웹에서 H2콘솔로 들어가 확인해볼 수 있다.

 

http://localhost:8080/h2-console 주소로 들어가면 아래와 같은 화면이 나온다 .JDBC URL은 콘솔창에서 매번 바뀌기때문

 

에 검색해서 찾아 들어가야한다.

여기서 SELECT문으로 Run해보면 똑같은 결과를 확인할 수 있다.

insert into
article(id,title,content)
values(3, 'cccc', '3333');

그리고 H2 console에서 insert문을 통해 추가도 가능하다.

 

- Lombok,롬복과 리팩터링 (기존 코드 간소화 하기)

코드를 간소화 해주는 라이브러리, 코드를짧게 압축해 리팩토링 할 수 있다.

 

getter(), setter(), toString()등을 간소화 시켜주고, 코드의 반복을 최소화 해준다.

 

아래와같이 build.gradle에 롬복을 추가해주고 새로고침 해준뒤 플러그인에 Lombok을 설치해준다.

dependencies {
	// 롬복 추가!
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
    
    ........

 

- 어노테이션으로 기존 코드 축약

아래 두 코드는 기존의 코드들을 AllArgsConstructor와 ToString으로 기존의 메소드 들을 축약시켜 준것이다.

 

또 println으로 출력하던 결과물을 log.info() 로통해 기록도 남길 수 있게 바꿀 수 있다.

ArticleForm.java

............

@AllArgsConstructor
@ToString // 이 두개 어노테이션 써주면 아래 주석단 두개와 같다.
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);
    }
}


/////////

Article.java

....
@Entity// DB가 해당 객체를 인식 할 수 있다.
@AllArgsConstructor
@ToString
public class Article {

    @Id // 대표값을 지정해준다 주민번호와 같은것
    @GeneratedValue // 1, 2, 3 등 자동 생성 해주는 어노테이션이다.
    private Long id;

    @Column
    private String title;
    @Column
    private String content;

    public Article() {

    }

//    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 + '\'' +
//                '}';
//    }
}

.......
ArticleController.java
.........

@Controller
@Slf4j //로깅을 위한 어노테이션
public class ArticleController {

    @Autowired // 스프링 부트가 미리 생성해놓은 객체를 가져다가 자동 연결!
    private ArticleRepository articleRepository;

    @GetMapping("/articles/new")
    public String newArticleForm(){
        return "articles/new";
    }

    @PostMapping("/articles/create")
    public String createArticle(ArticleForm form){
//        dto에 있는거냐 물음표 나오면 알트 엔터 무슨 문제였을까?
//        System.out.println(form.toString()); -> 로깅기능으로 대체하기
        log.info(form.toString());


        //    1.Dto를 변환 Entity로!
        Article article = form.toEntity();
//        System.out.println(article.toString());
        log.info(article.toString());
//    2. Repository에게 Entity를 DB에 저장하게 한다.
        Article saved = articleRepository.save(article);
//        System.out.println(saved.toString());
        log.info(saved.toString());
        //Crud 리포지토리 기능 가져와서 사용할 수 있다.
        
        ...........

 

이제 나머지 CRUD기능을 완성해 봐야겠다. 확실히 오늘 클래스부터 인터페이스 바로 전까지 공부를 해봤는데

 

좀더 코드들이 눈에 들어오는것 같다.

 

- 출처

스프링부트, 입문!

https://www.inflearn.com/course/%EA%B0%9C%EB%85%90%EC%8B%A4%EC%8A%B5-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%9E%85%EB%AC%B8/dashboard

profile

날아라김지원

@flykimjiwon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!