-
[Spring Boot] JPA / DB 데이터 출력 / HTML에 서버 데이터 넣기Spring | SpringBoot 2024. 8. 5. 22:14
- JPA?
원래 관계형 데이터베이스는 SQL이라는 언어를 써서 데이터 입출력을해야하는데
ORM이라는 라이브러리도 함께 설치해서 쓰는 경우가 많습니다.
ORM을 설치하면 SQL이 아니라 자바코드로 입출력을 해결할 수 있습니다.
테이블들을 클래스로 관리해서 타입체크도 되고 코드 재사용도 쉽고 여러 장점이 많습니다.
이거 쓰다가 마음에 안들면 직접 SQL 작성도 가능합니다.
실은 지금 설치하는 라이브러리를 Hibernate라고도 부르는데
JPA는 자바에서의 ORM 표준 문법같은거고
JPA 문법을 개발자들이 쓰기쉽게 만들어준게 Hibernate라는 라이브러리입니다.
이게 제일 인기있어서 이거 JPA ~ 설치하면 자동으로 Hibernate가 함께 설치되는 것임
그래서 JPA랑 Hibernate를 혼용해서 많이 부릅니다.
[ DB 데이터 출력하려면 ]
테이블에서 데이터 입출력하려면 항상 3-step 이 필요
1. repository라는걸 만들고 2. DB입출력 원하는 클래스에서 repository를 등록하고 3. DB입출력문법 가져다가 쓰면 됩니다.
- 1. Repository interface 만들기
public interface 작명 extends JpaRepository<엔티티명, id컬럼타입> { }
이렇겡
import org.springframework.data.jpa.repository.JpaRepository; public interface ItemRepository extends JpaRepository<Item, Long> { }
- 2. DB입출력 원하는 클래스에서 repository를 등록
@Controller @RequiredArgsConstructor public class ItemController { private final ItemRepository itemRepository; (API들 ~~) }
tem 테이블에서 입출력하고 싶은 클래스가 있으면
클래스 안에 변수를 아무 이름으로 하나 만들어줍니다.
- 근데 타입을 아까만든 repository 이름으로 합시다.
- 클래스 위에다가 @RequiredArgsConstructor 라는 것도 추가해야하는데 Lombok 문법입니다.
- private final 붙여야 잘됩니다.
그럼 앞으로 변수 안에 DB입출력 함수가 가득 들어있으니 그걸 자유롭게 사용하면 됩니다.
- 3. DB 입출력 문법 사용하기
등록한 변수엔 DB 입출력 함수들이 들어있기 때문에 점찍어서 맘대로 사용
등록한변수.findAll() 이러면 테이블의 데이터를 다 가져와줍니다.
등록한변수.save() 이러면 테이블에 데이터 저장도 가능합니다.
var result = itemRepository.findAll();
- List 자료형
여러개의 문자나 숫자를 한 변수에 넣고 싶으면 List 안에 넣기
List는 여러 종류가 있는데 보통 ArrayList를 많이 사용
var a = new ArrayList<>(); a.add(30); a.add(40); System.out.println(a); System.out.println(a.get(0);
ArrayList에는 .add() 라고 쓰면 안에다가 자료를 입력할 수 있습니다.
한개만 출력하려면 .get(순서) 입력하면 됩니다.
List<Integer> a = new ArrayList<>(); a.add(30); a.add(40); System.out.println(a);
var 말고 좀 더 정확히 변수의 타입을 기재하고 싶으면 ArrayList<> 타입 넣으면 됩니다.
<> 안에는 리스트에 넣을 자료들의 타입을 기재할 수 있습니다.
위 처럼 작성하면 Integer만 넣을 수 있는 리스트가 됩니다.
* List, ArrayList? 왜 List<어쩌구> 썼냐면 원래 ArrayList랑 비슷한 타입이 몇개 있습니다. LinkedList 이런것도 있고 그런것들의 상위 타입이 List이다 그래서 List로 넣어버리면 나중에 맘대로 ArrayList, LinkedList로 필요할 때 바꾸는게 쉬워서 이렇게 쓰는 경우가 많습니다. 실은 그런 경우 거의 없고 List가 더 짧고 간결해보이니까 쓰는 것
- 테이블의 한 행을 출력하려면?
List<Item> result = itemRepository.findAll(); System.out.println(result.get(0)) System.out.println(result.get(0).title)
이러면 List 안에 들어있던 여러 행 중에 0번째 행을 가져오고
그 중에 .title 컬럼도 출력가능
[ HTML에 서버데이터 넣기 ]
- Thymeleaf th:each 반복문
<div class="card" th:each="작명 : ${items}"> <img src="https://placehold.co/300"> <div> <h4 th:text="${items.get(0).title}">바지</h4> <p>7억</p> </div> </div>
1. 반복생성하고 싶은 html 덩어리에 th:each를 붙이고
2. 안에 작명 : ${서버에서보낸변수} 이런걸 채워줍니다.
그럼 서버에서 보낸 변수에 담긴 자료 갯수만큼 html 덩어리를 복붙해줍니다.
<div class="card" th:each="i : ${items}"> <img src="https://placehold.co/300"> <div> <h4 th:text="${i.title}">바지</h4> <p>7억</p> </div> </div>
th:each 쓰면 ${서버에서보낸변수}에 있던 List 안의 자료들을 꺼내서 작명한 변수에 넣어줍니다.
변수 출력하고 싶으면 언제나 th:text 쓰면 되고 ${} 안에 변수명 적으면 됩니다.
- object 출력 안의 변수들을 전부 한번에 출력하고 싶으면 @ToString
object 쓰다보면 가장 불편한 점이 이건데
object.변수명 이런건 출력하면 잘나오지만
object 자체는 출력해봤자 com.apple.shop.Item@어쩌구 이런 식으로만 출력됩니다.
그래서 간혹 object의 모든 변수를 한 번에 편하게 출력하고 싶으면?
=> 직접 "object에 있는 모든 변수를 한 번에 출력해주는 함수" 이런걸 구현하면 됩니다.
@Entity public class Item { public Long id; public String title; public Integer price; public String toString(){ return this.title + this.price; } }
lombok 사용시 위와 동일하게 동작
@Entity @ToString public class Item { public Long id; public String title; public Integer price; }
결과는 아래처럼 모든 변수가 출력
Item(id=null, title=null, price=null)
* 이글은 아래 강의를 참고해 작성했습니다.
https://codingapple.com/course/spring-boot-jpa/
쉽게 배우는 Spring Boot & JPA - 코딩애플 온라인 강좌
Next.js는 프론트엔드부터 서버까지 만들 수 있는 React기반 프레임워크입니다. 이것만 사용해도 풀스택 웹개발이 가능합니다. Next.js 사용시 서버사이드 렌더링이 쉽기 때문에 React, Vue만 사
codingapple.com
'Spring | SpringBoot' 카테고리의 다른 글
[Spring Boot] 수정기능 (0) 2024.08.16 [Spring Boot] REST API의 예외처리 방법 / Service 레이어로 분리 (0) 2024.08.16 [Spring Boot] 상세페이지 만들기 / Optional / 예외처리 (0) 2024.08.12 [Spring Boot] 상품 추가기능 / th:fragment / th:replace (0) 2024.08.10 [Spring Boot] Controller / Thymeleaf / Entity (0) 2024.08.05