자바 버전이 21은 jarkrta라 현재 11에서 21로 바꿔 import가 안맞아 교체 해야되는 상황에서
밑 처럼 설정하면 잘못된 improt 지우기만하면됨
JOIN DTO를 안만들어도 되는 ORM
📌
ORM 이란 (Object Relational Mapping) 객체-관계 매핑을 뜻한다.
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결, 각 타입의 언어로 변환)해주는 것을 말한다.
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하는데,
ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
데이터베이스 데이터 < - 매핑 - > Object 필드
객체를 통해 간접적으로 데이터베이스를 다룬다.
결론:조인해서 담을 수 있기 때문에 DTO를 만들 필요가 없다.
테이블은 데이터 타입 스칼라 밖에 담을 수 없음
자바는 타입이 OBJECT, ARRAYLIST등 여러가지를 받을 수 있음
이 불일치를 해결해주는게 ORM이다.
관계 매핑 어노테이션
@ManyToOne
📌
N:1 관계 설정에 사용한다.
JPA가 외래키(FOREIGNKEY)를 자동으로 생성 및 관리해준다.
테이블의 컬럼도 만들어준다.
spring은 객체 리턴시에 json으로 바꿔준다.
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을 활용하면, 복잡한 데이터베이스 작업을 객체 지향적인 방식으로 쉽게 처리할 수 있습니다.
public Board findById(int id) {
Queryquery= 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);
Boardboard= (Board) query.getSingleResult();
return board;
}
// 데이터 리턴시 (RestController or ResponseBody) - 객체를 리턴하면 스프링이 json으로 변환@GetMapping("/api/board/{id}")public@ResponseBody Board apiBoard(@PathVariableint id) { // @ResponseBody -> 파일을 안 찾고 데이터를 리턴한다.return boardRepository.findById(id);
}
@ManyToOne// Many 는 Board One은 User (1대 N) -> 자동으로 Foring키로 만들어 준다.private User user;