최대 절전 모드에 비해 myBatis의 장점은 무엇입니까? [닫은]


33

나는 내 자신의 연구를 수행하고 기본 개념을 이해했습니다. 그러나 일부 통찰력은 실제 경험을 통해서만 얻을 수 있습니다.

새로운 프레임 워크를 배울 가치가있는 myBatis의 장점은 무엇입니까?
어떤 경우에 사용하지 않겠습니까?


3
나는 둘 다 테스트했고 카이엔을 사용했다.
deadalnix

답변:


38

달성하려는 것을 고려하십시오. 일반적으로 명령 쿼리 응답 분리 모델은 복잡한 도메인에 적합합니다.

그 이유는 일반적으로 다음 두 가지 중 하나를 수행하려고하기 때문입니다.

  1. 복잡한 도메인 엔터티 생성 / 업데이트 / 삭제
  2. 분석 페치 쿼리 실행 (예 : 요약 / 집계 쿼리)

최대 절전 모드 는 사례 1에서 잘 작동하므로 POJO를 작성하고 지속 / 업데이트 할 수 있습니다. 도메인이 상당히 크지 않은 경우에도이를 신속하게 수행합니다.

myBatis 는 응답을 원하는 페치 쿼리 (케이스 2)에 적합합니다. Hibernate는 전체 객체 그래프를로드하려고 시도하고 대형 도메인에서 작동하도록 LazyLoading 트릭으로 쿼리 튜닝을 시작해야합니다. 엔터티 개체를 반환하지 않는 복잡한 분석 쿼리를 실행할 때 중요합니다. 이 경우 Hibernate는 BigDecimal과 같은 거대한 기본 유형을 가진 SqlQuery와 bean Transformers만을 제공하는 반면 myBatis는 간단한 POJO 비 엔티티에 쉽게 맵핑 할 수 있습니다.

이 두 경우는 도메인 데이터를 변경하려는 명령 과 일부 데이터를 가져 오려는 응답 의 차이점 입니다.

따라서이 두 가지 경우와 응용 프로그램의 기능을 고려하십시오. 도메인이 단순하고 정보를 가져 오는 경우 myBatis를 사용하십시오. 복잡한 도메인이 있고 엔터티를 유지하는 경우 최대 절전 모드를 사용하십시오. 둘 다 수행하는 경우 하이브리드 방식을 고려하십시오. 그것이 우리가 프로젝트에서 사용하는 것입니다. ;)


2
최대 절전 모드는 사례 2에서도 잘 작동합니다. 간단한 예를 보려면 다음을 참조하십시오. mkyong.com/hibernate/hibernate-native-sql-queries-examples
Mike Partridge

3
"Hibernate는 전체 객체 그래프를로드하려고 시도한다"이것은 구성 실수처럼 들린다. "lazyLoading 트릭으로 쿼리 튜닝을 시작해야합니다"는 fetch = eager를 어딘가에 설정 한 것처럼 들립니다. JPA에는 실질적으로 SQL이지만 Hibernate / JPA와 잘 통합 된 JPQL이 있습니다. 나는 그것이 2 번을 잘한다고 생각합니다. ORM을 100 % 올바르게 구성하기 전에 사람들이 1 년 이상 프로덕션에서 실행하는 것이 일반적입니다. 구성 오류라고 말할 때 최소화하지 않습니다. 이러한 도구를 사용한 구성은 실제로 시간이 많이 걸리고 까다로울 수 있습니다!
GlenPeterson

3
@GlenPeterson 나는 Hibernate가 길들여 질 수 없다고 말하지는 않지만, 대부분의 사람들에게, 인용 된대로 최적화하지 않으면 복잡한 도메인 엔티티가 느리게로드됩니다. 복잡한 분석 쿼리는 대부분의 사용자에게 myBatis를 사용하는 것이 더 간단하지만 실제로 ORM을 사용하여 수행 할 수도 있습니다. 많은 사람들이 ORM의 벤더 독립성을 필요로하는지에 대한 의문이 많습니다.
Joseph Lust

10
최대 절전 모드에서는 아래에 DB가 없으며 Java 컬렉션을 사용하여 설계된 것처럼 데이터 모델을 취급합니다. 그렇지 않은 경우가 종종 있습니다. DB 레벨에서 데이터 표현은 매우 다를 수 있으며이를 자동으로 Java 콜렉션에 맵핑하려고 시도하는 것이 반드시 의미가있는 것은 아닙니다. 이것이 Hibernate가 "Leaky abstraction"의 완벽한 예인 이유이다. MyBatis는 훨씬 간단하고 이해하기 쉽고 마술이 없습니다. 그렇습니다. SQL 기반 데이터베이스에 SQL을 사용하는 데 아무런 문제가 없기 때문에 좋은 점이 있습니다.
Marcin

2
@Marcin 좋은 지적. Hibernate에서 컬렉션 에뮬레이션과 관련된 문제가 너무 많습니다. 예를 들어 일부 코드는 myBag.size ()를 호출하고 Hibernate는 750K 객체를 계산하기 전에 메모리에로드하려고 시도합니다. SQL 만 필요한 경우 SQL을 사용하십시오.
Joseph Lust

19

MyBatis는 SQL 중심입니다. SQL 문을 호출하고 결과 (테이블)를 객체 트리에 매핑하는 데 도움이됩니다.

주요 이점은 ORM이 아니라는 것입니다. 테이블을 객체에 매핑하지 않으므로 orm 임피던스 불일치가 발생하지 않습니다. 복잡하거나 레거시 데이터베이스에 적합하거나 저장 프로 시저, 뷰 등과 같은 DB 기능을 사용하는 데 적합합니다.

매우 간단하고 배우기 쉬우므로 숙련 된 팀에도 적합합니다. 그들 중에는 최대 절전 모드 전문가가 필요하지 않기 때문입니다.

jpetstore 6 http://mybatis.org/spring/sample.html을 살펴보십시오 .


2
이러한 "숙련 된 팀"은 여전히 ​​SQL을 알아야합니다.
perp

간결한 대답, 두 가지 주요 차이점은 db 중심 + 얕은 학습 곡선입니다. 그러나 나는 "복잡하거나 레거시 데이터베이스에 적합"에 전적으로 동의하지 않습니다. db 중심 디자인의 이점은 db 디자인을보다 잘 제어 할 때 더욱 분명해집니다.
DPM

5

때문에 질문은 의미내 댓글 , 여기에 내가 쓰고 생각했던거야.

우선, 원래 질문의 맥락에서 파생됩니다. 다른 상황에서는 다른 조언을 해줄 수 있습니다. MyBatis를 제안한 요점은 다음과 같습니다.

... 일부 성능 문제가 발생했습니다.

우리는 데이터베이스 성능을 얻기 위해 일반 Jdbc를 선호하여 최대 절전 모드를 중단하기로 결정했습니다 ...

과거 프로젝트 중 하나에서, 우리 팀은 설명과 같은 이유로 최대 절전 모드에서 전환하는 것을 고려했습니다. 당신과 마찬가지로, 우리는 JDBC로 전환하려고했지만 다른 프로젝트의 동료들은 MyBatis를 추천했습니다. 팀은 문제가 발생하는 경우 JDBC를 대체 옵션으로 유지하면서 시도해보기로 결정했습니다.

그 순간, 나는 MyBatis에 대해 전혀 알지 못했지만 JDBC에 대한 경험이 충분하여 제대로 작동 할 것입니다. 그럼에도 불구하고, 나는 MyBatis를 시도한다는 아이디어를 강력하게지지 해 왔는데, 그 이유는 내 과거 경험에 따라 JDBC로 작성해야 할 보일러 플레이트 코드의 양이 어려울 수 있기 때문입니다.

  • 공평하게 말하면, 나는 이해하기 쉽고, 신뢰할 수 있고, 데이터베이스 상호 작용을 잘 제어 할 수있는 JDBC를 좋아하지만, 그 대가를 치르는 대가는 실제로 높습니다. JDBC로 얼마나 많은 상용구를 입력했는지 기억할 때마다 손가락이 아프기 시작합니다.

어쨌든, 우리는 MyBatis를 시험해 보았고 광고 된대로 작동했습니다. 그래서 내가 당신이 묻는 의견을 썼습니다.

기술에 대한 자세한 개요를 제공하거나 어떻게 든 우수성을 칭찬하는 경우-죄송합니다. 가능하다면-짧은 의견을 제시하는 대신 원래 질문에 대한 별도의 답변으로 이미 작성했습니다. 나는 그때 MyBatis에 대해 아무것도 모른다고 언급했습니다. 글쎄요, 여전히 미안합니다. Hibernate로부터의 전환은 다른 팀원들에 의해 이루어졌으며 내가 작업했던 코드에는 영향을 미치지 않았다. 나는 1) MyBatis가 Hibernate와 관련된 문제를 해결했다 .2) 자체 문제를 일으키지 않았다. JDBC로 전환하면 예상됩니다. 그게 다야.


3

최대 절전 모드는 너무 많은 마법 , 예기치 않은 동작 및 큰 학습 곡선 으로 잘 알려져 있습니다 . 단순성에 더 중점을두고 통제 할 수있는 다른 프레임 워크가 있습니다.

myBatis는 그중 하나이고, 내 프로젝트 MentaBean 은 또 하나입니다. 도움이 될만한 블로그 게시물을 작성했습니다 .


6
세르지오 안녕하세요. 우리 커뮤니티는 일반적으로 명백한 자기 홍보에 눈살을 찌푸리며 귀하의 답변에 귀하의 소속 을 명확하게 공개해야합니다. 귀하의 답변을 편집하여 MentaBean이 귀하가 참여하는 프로젝트이며 귀하가 지적하는 블로그 게시물을 작성했습니다. 문구가 마음에 들지 않으면 자유롭게 변경하십시오 MentaBean과 관련된 일종의 공개. 자세한 내용은 FAQ관련 섹션 을 읽으십시오 .
yannis

안녕하세요 야 니스. 나는 그렇게 할 것이다. 고마워요 :)
Sergio Oliveira Jr.

-1

5 년 전에 Hibernate 3을 사용하여 데이터로드 및 데이터 변환 프로젝트에 Hibernate를 사용했는데 정말 훌륭하다고 생각했습니다. 나는 작은 전자 상거래 응용 프로그램을하고 있으며 Hibernate 4를 사용해 보았고 매우 실망했습니다. 그들은 도구를 제거하고 IDE에 긴밀하게 통합되었습니다. 나는 MyBatis를 시험해 보았고 밤새도록 일하는 모든 것을 갔고 응용 프로그램에 얼마나 쉽게 통합 할 수 있는지 매우 기쁘게 생각합니다. 나는 Hibernate가 너무 부풀어 오른 것으로 생각 하고이 시점에서 Hibernate보다 EJB 3을 사용할 것이다.


1
EJB 3과 Hibernate는 어떻게 비교됩니까 ???
Jose
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.