JPA란?
자바 ORM기술의 표준 명세로 자바에서 제공하는 기술입니다.
자바에서 관계형데이터베이스를 사용하는 방식을 정의 한 인터페이스로 자바 클래스와 DB테이블을 매핑시켜줍니다.
ORM이란?
Object Relational Mapping 객체 관계 매핑의 약자입니다.
Object <--> ORM <--> Relational Database 의 형태로 객체와 RDBMS의 데이터를 자동으로 매핑시켜주는 도구입니다.
MVC패턴에서는 Model을 기술하는 도구이며 객체와 모델사이의 관계를 기술하는 도구입니다.
ORM의 장점
- 1. SQL Query를 작성하는게 아닌 메서드로 데이터를 조작할 수 있기때문에 OOP에 더 가까운 형태로 코딩이 가능합니다.
- 2. SQL문을 직접 작성하지 않고 엔티티를 객체로 표현할 수 있습니다.
- 3. 간편한 CRUD를 작성하기에 MyBatis에 비해서 너무나도 간편하게 코드를 구현할 수 있기 때문에 가독성이 좋아집니다.
ORM의 단점
- 1.러닝커브가 심해서 간편한 CRUD를 작성하기에는 쉽지만 복잡한 쿼리를 작성하기에는 배우기가 어렵습니다.
- 2.쿼리의 log를 봐서 불필요한 쿼리를 엄청나게 생성할 수 있기 때문에 데이터낭비가 생길 수 있기 때문에 조심해서 사용해야 합니다.
이러한 단점들도 인해서 사용하는 방법들이 여러가지가 있는데
spring data jpa + mybatis,
spring data jpa + jooq(?) <-안 써봐서 이건 잘 모르겠습니다.
spring data jpa를 사용하는데 기본 CRUD만 JPQL로 작성을 해주고 그 이외에는 native 쿼리를 사용하는 방법등 여러가지 방법이 있는데 이중에서 native쿼리를 이용하여 join연산문을 사용하는 방법을 해보겠습니다.
native쿼리를 사용하는 기본 문법
JQPL을 사용할 때는 해당 방식으로 쿼리를 작성했는데
@Query("select b, w from Board b left join b.writer w where b.bno =:bno")
Native Query를 이용하고 싶으면 value =" Native Query" , nativeQuery = true 를 사용해주면 네이티브 쿼리로 변경하여 작성이 가능합니다.
위의 코드를 count쿼리로 변경한다고 했을 때는 다음과 같이 작성이 됩니다.
@Query(value = " SELECT board.*, board.*, member.* "+
" FROM board "+
" LEFT JOIN member "+
" ON board.writer_email = member.email "+
" WHERE board.bno = :bno ; ", nativeQuery = true)
코드의 라인수가 더 길어지지만 JQPL을 학습하기에는 시간이 없고 어떻게든 적용을 해야한다고 했을 때
그냥 native Query를 사용해서 처리하면 불확실한 동작들을 하는 일이 없을 것이고 내가 원하는 쿼리들만 이용하여 사용할 수 있기 때문에 필요에 따라서 사용할 수 있다고 생각됩니다.
'Programming > Java' 카테고리의 다른 글
| [Java] Selenium을 사용한 웹 크롤링 기초: 자바 편 (0) | 2023.11.05 |
|---|---|
| Model1, Model2의 차이 (0) | 2023.09.08 |
| [Java] Builder pattern -이해 및 사용방법 (0) | 2023.08.31 |
| JSP Servlet :: DAO, DTO, Controller 이용한 MVC패턴 CRUD 메모장 만들기 (1) (0) | 2023.08.08 |
| Java soket,dialog,button을 활용한 채팅창 만들기 (0) | 2023.07.17 |