본문 바로가기
개발/자바

자바 JPA, Spring Data JPA, MyBatis

by wusdlqslek 2024. 3. 26.

JPA (Java Persistence API)로 조회하기

JPA를 사용하면 객체-관계 매핑(ORM)을 통해 데이터베이스 테이블을 자바 객체로 추상화한다. 예를 들어, 사용자의 ID를 통해 특정 사용자 정보를 조회하는 경우, 엔티티 매니저를 사용하여 간단히 조회할 수 있다.

// 엔티티 매니저를 통한 조회
User user = entityManager.find(User.class, userId);

여기서 User는 엔티티 클래스이며, userId는 조회하고자 하는 사용자의 고유 ID이다. 해당 ID를 가진 엔티티가 존재하면 그 인스턴스를 반환하고, 존재하지 않으면 null을 반환한다.

JPQL을 사용하여 쿼리를 작성할 수도 있다. JPQL은 엔티티 객체를 대상으로 한 쿼리 언어이다.

// JPQL을 사용한 조회
String jpql = "SELECT u FROM User u WHERE u.id = :id";
User user = entityManager.createQuery(jpql, User.class)
                          .setParameter("id", userId)
                          .getSingleResult();

Spring Data JPA로 더 쉽게 조회하기

Spring Data JPA를 사용하면, 복잡한 쿼리 없이도 메서드 이름만으로 조회 기능을 구현할 수 있다. 사용자 ID로 사용자 정보를 조회하려면, 리포지토리 인터페이스에 메서드를 추가한다.

// Spring Data JPA 리포지토리
public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findById(Long id);
    Optional<User> findByUsername(String username);
    
    // @Query 어노테이션을 사용한 쿼리
    @Query("SELECT u FROM User u WHERE u.username = :username")
    Optional<User> findUserByUsername(@Param("username") String username);
}

쿼리 메서드로 해결할 수 없는 복잡한 쿼리는 @Query 어노테이션을 사용하여 직접 JPQL을 작성할 수 있다.

MyBatis로 세밀한 제어하기

MyBatis는 개발자가 작성한 SQL을 자바 객체와 연결해 준다. 사용자의 ID를 통해 특정 사용자 정보를 조회하는 경우, 다음과 같이 매퍼 XML 파일에 SQL 쿼리를 정의할 수 있다.


<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="findUserById" resultType="com.example.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

MyBatis를 사용하면, XML 파일 또는 어노테이션에 직접 SQL을 작성함으로써 데이터베이스 작업을 세밀하게 제어할 수 있다. 다음은 MyBatis에서 어노테이션을 사용하여 동일한 쿼리를 작성하는 방법이다.

public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User findUserById(Long id);
}

또한, MyBatis는 동적 SQL을 통해 조건에 따라 쿼리를 변경할 수 있는 강력한 기능을 제공한다. 예를 들어, 사용자의 이름 또는 이메일에 따라 검색할 수 있는 쿼리를 작성할 때 다음과 같이 사용할 수 있다.


<select id="findUserByNameOrEmail" resultType="com.example.User">
    SELECT * FROM user
    WHERE 1=1
    <if test="name != null">
        AND name = #{name}
    </if>
    <if test="email != null">
        AND email = #{email}
    </if>
</select>

이처럼 MyBatis의 동적 SQL을 사용하면 실행 시점에 SQL 쿼리를 조건에 맞게 자동으로 생성하고, 변화하는 요구사항에 유연하게 대응할 수 있다.

 

JPA, Spring Data JPA, 그리고 MyBatis는 자바 애플리케이션에서 데이터베이스 작업을 수행하는 데 각기 다른 접근 방식을 제공한다. JPA는 객체 중심의 데이터 접근 방식을, Spring Data JPA는 개발의 편의성을, MyBatis는 SQL 중심의 세밀한 데이터 접근 제어를 가능하게 한다.

반응형

'개발 > 자바' 카테고리의 다른 글

Thymeleaf 속성  (0) 2024.04.06
스프링 프레임워크 자주 쓰는 어노테이션  (1) 2024.04.01
스프링 프레임워크 AOP에 대해..  (0) 2024.03.25
자바 생성자  (0) 2024.02.05
메소드 정리  (1) 2024.02.02

댓글