JPA MyBatis

최종윤·2023년 12월 8일
0

스프링

목록 보기
6/6

spring boot starter mybatis 의존성 추가하면 mybatis 설정을 안 하고 @Mapper 을 통해 SQL을 작성할 수 있습니다.

JPA와 달리 Table을 직접 생성해야 합니다.
id를 자동으로 삽입하는 @GeneratedValue도 활용 불가합니다.
table 직접 생성하므로 @Id, @Column 를 사용하지 않습니다.

JPA와 같이 사용한다면 테이블 생성 도움을 받을 수 있습니다.
application.yml에 DataSource설정을 한 상태라면 중복하여 할 필요는 없습니다.

common 모듈에 엔티티를 작성하고 shopWebParent모듈에서 mapper를 이용해 DB 조회하려고 했는데 코드 상으로는 common모듈에 있는 것을 읽을 수 있지만 mapper에서 common모듈을 참조하지 못해 에러가 발생했습니다.

mybatis-config.xml에 다음을 추가합니다.

@Mapper인터페이스로 이미 작성한 경우 xml파일에 중복작성하면 유지보수에 혼란을 줍니다. 그냥 User를 webParent로 옮겨 실행해 보았습니다.
근데 또 에러.. @Entity를 사용한 것이 원인일 수 있을 것 같아 확인해 보았습니다.

mybatis를 사용하여 SQL을 작성하고자 할 때 조회하는 엔티티를 @Entity로 테이블을 생성해도 돼?

MyBatis를 사용하여 SQL을 작성할 때 @Entity 어노테이션은 JPA(Java Persistence API)에서 사용하는 것이며, 특히 Hibernate와 같은 JPA 구현체에서 엔터티 클래스를 나타냅니다. MyBatis는 JPA와는 별개의 데이터 액세스 프레임워크이므로 @Entity 어노테이션을 직접적으로 사용하지 않습니다.

MyBatis와 JPA(Hibernate)를 함께 사용할 때, 특히 조회하는 엔터티를 @Entity로 테이블을 생성하고자 할 때 몇 가지 고려해야 할 사항이 있습니다.

JPA와 MyBatis의 호환성:

JPA와 MyBatis는 각각 ORM(Object-Relational Mapping) 프레임워크로, 각각의 방식으로 데이터베이스와 상호 작용합니다. JPA는 엔터티를 사용하여 객체와 테이블을 매핑하고, MyBatis는 SQL 쿼리를 직접 작성하여 데이터베이스와 상호 작용합니다. 이 두 프레임워크는 서로 다른 접근 방식을 가지고 있습니다.

중복 정의의 위험:

같은 엔터티를 동시에 JPA 엔터티로 사용하고, MyBatis 매퍼에서도 사용하려는 경우 중복 정의의 위험이 있습니다. 두 프레임워크가 동일한 엔터티를 서로 다르게 해석할 수 있고, 이로 인해 예상치 못한 문제가 발생할 수 있습니다.

각각의 역할에 맞게 사용:

JPA는 주로 데이터베이스와 객체 간의 매핑 및 관계를 관리하는 데 사용되며, MyBatis는 직접 SQL을 작성하여 세밀한 제어를 필요로 할 때 사용됩니다. 이 두 프레임워크의 역할에 맞게 사용하는 것이 좋습니다.

조언:

일반적으로는 JPA와 MyBatis를 동시에 사용하지 않는 것이 좋습니다. 각각의 프레임워크는 자체적인 목적과 장단점이 있으며, 필요에 따라 선택하여 사용하는 것이 좋습니다.
JPA를 사용하여 엔터티를 정의하고 테이블을 생성하려면, @Entity 어노테이션 및 JPA 설정을 사용하세요.
MyBatis를 사용하여 직접 SQL을 작성하려면, JPA의 @Entity 어노테이션을 사용하지 않고 별도의 MyBatis 매퍼 인터페이스 및 XML 파일을 사용하세요.
프로젝트 전체에서 JPA와 MyBatis를 함께 사용하는 것은 복잡성을 증가시킬 수 있으므로 신중하게 고려해야 합니다.

근데 SQL을 직접 작성하는 것은 JPA에서도 할 수 있는데 굳이 내가 MyBatis를 써야 하나?

profile
https://github.com/jyzayu

0개의 댓글