- MyBatis vs JPA2024년 12월 26일
- imaginaring
- 작성자
- 2024.12.26.:21
스프링 애플리케이션에서 데이터베이스 연결을 위해 대표적으로 MyBatis와 JPA를 사용한다.
두가지의 차이점을 알아보자
MyBatis
- SQL 매핑 프레임워크, 데이터베이스와의 직접적인 연동을 지원
- 특징
- 복잡한 조건문, JOIN등 연산과 같은 작업을 명시적으로 작성 가능
- SQL을 직접 제어, 세밀한 튜닝 가능
- 동적쿼리 지원 - <if> <choose> 등을 포함해 동적 쿼리 생성 가능
- 사용이 편하다
- XML기반으로 SQL과 자바 객체를 매핑
- 쿼리를 명확하게 정의 할 수 있어 이해하기 쉬움
- 저장 프로시저와의 통합 - DB 저장 프로시저를 호출하고 결과를 쉽게 처리할 수 있다
- 단점
- SQL 작성과 유지보수 부담이 크다
- 객체관계매핑(ORM) 기능이 제한적
- 코드와 SQL의 분리로 코드간 일관성이 떨어질 수 있다
- 예시
// Mapper XML <mapper namespace="com.example.mapper.UserMapper"> <select id="getUserById" parameterType="int" resultType="User"> SELECT * FROM users WHERE id = #{id} </select> </mapper>
// Mapper 인터페이스 public interface UserMapper { User getUserById(int id); } // 사용 @Autowired private UserMapper userMapper; User user = userMapper.getUserById(1);
JPA
- 자바 표준 ORM 기술, 객체와 DB테이블간 매핑을 자동화
- 특징
- ORM : 자바 객체와 DB 테이블을 매핑하여 SQL대신 메서드를 통해 DB 조작, 좀 더 객체지향적이다
- 코드 간결성 보장 : SQL 직접 작성안함, 엔티티 객체와 메서드로 DB 연산 수행
- QueryDSL 지원 : JPA와 함께 동적 쿼리 작성을 간편하게 도와주는 라이브러리
- 마이크로서비스 환경 적합 : DB와 독립성을 유지하면서도 효율적인 DB 접근 계층 구현
- 객체 중심의 설계로 유지보수와 확장성이 뛰어남
- SQL 자동 생성 => 코드 중복 감소
- 캐시, 페이징, 지연쓰기, 지연로딩(Lazy Loading) 등 고급 기능 지원
- 단점
- 복잡한 쿼리나 DB 튜닝이 필요한 경우 제약이 있을 수 있음
- 초기 설정과 '어렵다'
- 일부 DB 벤더 특화 기능 지원에 한계점
- 예시
// 엔티티 클래스 @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters and Setters }
// 리포지토리 인터페이스 public interface UserRepository extends JpaRepository<User, Long> { User findByName(String name); } // 사용 @Autowired private UserRepository userRepository; User user = userRepository.findByName("John Doe");
요약
특징 MyBatis JPA 사용 목적 복잡한 SQL 작성에 적합 객체 중심 설계와 ORM 지원 SQL 관리 SQL 직접 작성 SQL 자동 생성 동적 쿼리 강력한 지원 (<if>, <choose> 등) QueryDSL로 지원 러닝 커브 비교적 쉬움 초기 학습 곡선이 있음 벤더 종속성 데이터베이스 벤더 기능 활용 용이 벤더 독립적인 설계에 초점 복잡한 연산 처리 명시적으로 제어 가능 제약이 있을 수 있음 마이크로서비스 단일 모듈 환경에 적합 분산 시스템에서 유리 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)