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 어노테이션은 JPA(Java Persistence API)에서 사용하는 것이며, 특히 Hibernate와 같은 JPA 구현체에서 엔터티 클래스를 나타냅니다. MyBatis는 JPA와는 별개의 데이터 액세스 프레임워크이므로 @Entity 어노테이션을 직접적으로 사용하지 않습니다.
MyBatis와 JPA(Hibernate)를 함께 사용할 때, 특히 조회하는 엔터티를 @Entity로 테이블을 생성하고자 할 때 몇 가지 고려해야 할 사항이 있습니다.
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를 써야 하나?