14. ORM,JPQL

박선규's avatar
Jan 30, 2024
14. ORM,JPQL
 

import 자동설정

📌
자바 버전이 21은 jarkrta라 현재 11에서 21로 바꿔 import가 안맞아 교체 해야되는 상황에서 밑 처럼 설정하면 잘못된 improt 지우기만하면됨
notion image
 

JOIN DTO를 안만들어도 되는 ORM

📌
ORM 이란 (Object Relational Mapping) 객체-관계 매핑을 뜻한다.
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결, 각 타입의 언어로 변환)해주는 것을 말한다.
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하는데,
ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
데이터베이스 데이터 < - 매핑 - > Object 필드
객체를 통해 간접적으로 데이터베이스를 다룬다.
결론:조인해서 담을 수 있기 때문에 DTO를 만들 필요가 없다.
테이블은 데이터 타입 스칼라 밖에 담을 수 없음
자바는 타입이 OBJECT, ARRAYLIST등 여러가지를 받을 수 있음
이 불일치를 해결해주는게 ORM이다.
 

관계 매핑 어노테이션

@ManyToOne
📌
N:1 관계 설정에 사용한다. JPA가 외래키(FOREIGNKEY)를 자동으로 생성 및 관리해준다. 테이블의 컬럼도 만들어준다. spring은 객체 리턴시에 json으로 바꿔준다.
notion image

JPQL (Java Persistence Query Language)

목적: 객체 중심의 쿼리 작성, DB 간 호환성 유지.특징: 엔티티 객체를 대상으로 쿼리, SQL과 유사한 문법 사용.

JPQL 쿼리 예시

java // 이름이 '홍길동'인 사용자의 게시글 조회 TypedQuery<Board> query = em.createQuery( "SELECT b FROM Board b WHERE b.user.name = :userName", Board.class); query.setParameter("userName", "홍길동"); List<Board> results = query.getResultList();
이렇게 JPA와 JPQL을 활용하면, 복잡한 데이터베이스 작업을 객체 지향적인 방식으로 쉽게 처리할 수 있습니다.
 
notion image
public Board findById(int id) { Query query = em.createQuery("select b from Board b join fetch b.user u where b.id = :id", Board.class); //left join 앞에 (outer join 이 됨) -> JPQL 문법이다. query.setParameter("id", id); Board board = (Board) query.getSingleResult(); return board; }
// 데이터 리턴시 (RestController or ResponseBody) - 객체를 리턴하면 스프링이 json으로 변환 @GetMapping("/api/board/{id}") public @ResponseBody Board apiBoard(@PathVariable int id) { // @ResponseBody -> 파일을 안 찾고 데이터를 리턴한다. return boardRepository.findById(id); }
@ManyToOne // Many 는 Board One은 User (1대 N) -> 자동으로 Foring키로 만들어 준다. private User user;
 
Share article
RSSPowered by inblog