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 |
댓글