쿼리 파일 만들기 (Query Mapper)
Query Mapper를 사용하여 SQL 쿼리를 관리하여 코드의 가독성과 유지보수성을 높입니다.
MyBatis
Java 기반의 SQL Mapper Framwork로 객체 지향 프로그래밍 언어와 관계형 데이터베이스(SQL)을 쉽게 연결할 수 있도록 도와주는 ORM 도구입니다.
MyBatis의 특징
-. SQL Mapper Framwork
- SQL을 XML파일이나 어노테이션으로 정의하여 데이터베이스와 Java 객체를 쉽게 매핑합니다.
-. 직접적인 SQL 제어
- 개발자가 직접 SQL을 작성함으로써 SQL의 복잡한 로직을 제어하고 최적하할 수 있기 때문에 복잡한 쿼리 작업을 ORM 프레임워크보다 더 자유롭게 작성할 수 있습니다.
-. XML Mapper와 annotation
- XML Mapper는 SQL 쿼리들을 XML 파일에 정의하는 방식이고, annotation 방식은 Java 코드에 직접 SQL을 작성하는 방법입니다.
-. 객체와 SQL 결과 Mapping
- SQL 결과를 Java 객체와 Mapping 하거나 객체의 필드를 SQL 쿼리에 binding 할 수 있어 데이터베이스의 결과를 쉽게 Java 객체로 변환 할 수 있습니다.
MyBatis의 한계점
-. 결국 SQL을 직접 작성해야 합니다.
-. 테이블마다 비슷한 CRUD를 반복 작성해야 하며,DB 타입 및 테이블에 직접적으로 쿼리를 작성해야 함으로 종속적인 관계를 가집니다.
MyBatis의 동작
쿼리 코드 만들기 (JpaRepository)
Annotation을 사용하여 SQL 쿼리를 클래스나 메소드에 직접 정의하는 방법을 배우고 이를 통해 동적 쿼리 생성과 실행 과정을 이해할 수 있습니다.
JpaRepository의 주요 기능
Jpa Repository는 다양한 기능을 제공하여 개발자가 직접 구현하지 않아도 되는 CRUD 및 복잡한 데이터 조작 작업을 단순화합니다.
-. 기본 CRUD 메서드
- save(S entity) : 엔티티를 저장하거나 업데이트합니다.
- findById(ID id) : 주어진 ID에 해당하는 Entity를 조회합니다.
- findAll() : 모든 Entity를 조회합니다.
- deleteById(ID id) : 주어진 ID에 해당하는 Entity를 삭제합니다.
- delete(S entity) : 특정 Entity를 삭제합니다.
- exsistById(ID id) : 주어진 ID에 해당하는 Entity가 존재하는지 확인합니다.
-. 페이징 및 정렬
- findAll(Pageable pageable) : 페이징 정보를 사용해 데이터를 조회합니다.
- findAll(Sort sort) : 특정 정렬 기준으로 모든 Entity를 조회합니다.
-. Custom Query 메서드 정의
- 메서드 이름을 기반으로 자동으로 쿼리를 생성할 수 있습니다.
- 예를 들어
fineByUsername(String username)
메서드를 정의하면 JPA는 username으로 데이터를 조회하는 SQL 쿼리를 생성합니다.
- 예를 들어
-. JPQL 및 네이티브 쿼리 사용
- @Query 어노테이션을 사용하여 JPQL이나 네이티브 SQL 쿼리를 작성할 수 있습니다.
@Query("SELECT u FROM User u WHERE u.email = ?1")
User findByEmail(String email);
@Query(value = "SELECT \* FROM users WHERE email = ?1", nativeQuery = true)
User findByEmailNative(String email);
'내일배움캠프 > 내일배움캠프' 카테고리의 다른 글
[내일배움캠프] 심화 과제 진행해보기 Lv .2 (0) | 2024.11.18 |
---|---|
[내일배움캠프] TIL : 관점 지향 프로그래밍 AOP (0) | 2024.11.18 |
[내일배움캠프] TIL : Transaction (0) | 2024.11.13 |
[내일배움캠프] TIL : Projection (0) | 2024.11.13 |
[내일배움캠프] 심화 과제 진행해보기 Lv. 1 (0) | 2024.11.13 |
댓글