JAVA, Spring
Spring Boot DB테이블과 SQL, 롬복과 리팩터링
flykimjiwon
2023. 4. 4. 19:55
반응형
- 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기능을 완성해 봐야겠다. 확실히 오늘 클래스부터 인터페이스 바로 전까지 공부를 해봤는데
좀더 코드들이 눈에 들어오는것 같다.
- 출처
스프링부트, 입문!
반응형