由于java视频里以前好多都是SSH。但是在实际工作中没见过用hibernate的,基本都用mybatis。
我有一些疑问:
hibernate碰到什么样的业务会变成致命的弱点,都说hibernate效率低,能否举个例子(例如同一个查询用mybatis查询耗时1秒,用hibernate查询耗时10秒)
可能是有部分人遇到了hibernate的瓶颈,但是这部分人的业务量我觉得,不是大部分使用hibernate的人都能遇到的。一般的小项目,不超过100个用户,这样的项目综合考虑的话更适合用mybatis还是hibernate?主要从开发效率上来说的话。为什么?
巴扎黑2017-04-18 09:34:16
Zhihu에도 비슷한 질문이 있습니다.
제가 높은 표를 본 답은 hibernate
이 mybatis
보다 마스터하기 어렵고, SQL의 컨트롤이 약하다는 것이었습니다.
PHPz2017-04-18 09:34:16
둘 사이의 관계를 비교하고 개발 효율성, 유지 관리 가능성, 성능이라는 세 가지 측면을 고려합니다. 중요성 측면에서는 프로젝트 엔지니어링 개발 프로세스에서 개발 효율성 > 유지 관리성 > 성능이 중요합니다. 어쩌면 일부 기업에서는 성능이 더 중요할 수도 있지만, 전체적인 상황을 보면 개인적으로 개발 효율성 > 유지 관리성 > 성능이라고 생각합니다.
우선 개발 효율성입니다. 개인적으로, 간단한 추가, 삭제, 수정 및 쿼리만으로 간단한 CMS 같은 프로젝트를 수행한다면 Hibernate를 사용하는 것이 더 유리하다고 생각합니다. 몇 가지 기본 쿼리 및 일부 구성(Hibernate는 실제로 학습하기 위해, 개인적으로 mybatis보다 지식의 양이 훨씬 많다고 느낍니다). hiberbate는 java 객체를 사용하여 SQL을 작성하는 반면 mybatis는 기본 SQL을 직접 작성합니다. Hibernate는 좋은 매핑 메커니즘을 제공하며 mybatis는 resultmap paramMap 자체도 작성해야 합니다. Hibernate와 MyBatis는 모두 해당 코드 생성 도구를 가지고 있습니다. 간단하고 기본적인 DAO 레이어 메소드를 생성할 수 있습니다. 고급 쿼리의 경우 Mybatis에서는 SQL 문과 ResultMap을 수동으로 작성해야 합니다. Hibernate는 좋은 매핑 메커니즘을 가지고 있습니다. 개발자는 SQL 생성 및 결과 매핑에 신경 쓸 필요가 없으며 비즈니스 프로세스에 더 집중할 수 있습니다. 정리하자면, 개발 효율성의 관점에서 Hibernate>
유지관리성: hiberbate는 java 객체를 사용하여 sql을 작성하는 반면 mybatis는 기본 sql을 직접 작성합니다. SQL을 직접 작성하는 것은 유지 관리가 더 쉽지만 전자를 사용하려면 먼저 System.out.println(sql)을 사용하여 SQL을 인쇄해야 합니다. Hibernate의 쿼리는 테이블의 모든 필드를 쿼리하므로 성능이 소모됩니다. Hibernate는 쿼리해야 하는 필드를 지정하기 위해 자체 SQL을 작성할 수도 있지만 이는 Hibernate 개발의 단순성을 파괴합니다. Mybatis의 SQL은 수동으로 작성되므로 필요에 따라 쿼리 필드를 지정할 수 있습니다. Hibernate HQL 문을 튜닝하려면 SQL을 인쇄해야 하며, Hibernate의 SQL은 너무 보기 흉하기 때문에 많은 사람들이 싫어합니다. MyBatis의 SQL은 직접 수동으로 작성하기 때문에 조정이 쉽습니다. 그러나 Hibernate에는 자체 로그 통계가 있습니다. Mybatis 자체에는 로그 통계가 없으며 로깅을 위해 Log4j를 사용합니다.
성능: 둘 다 캐싱 및 세션 메커니즘을 제공합니다. 소규모 프로젝트는 거의 동일합니다. mybatis>hibernate.
黄舟2017-04-18 09:34:16
모두의 토론을 보면 mybaits가 더 낫다는 느낌이 들지만, 대규모 개발에는 항상 hibernate가 더 적합하다고 생각해서 그냥 hibernate로 갔습니다. 당시에는 프로젝트가 상대적으로 급해서 마이바티스처럼 사용했는데, 나중에 오랫동안 플레이하면서 흥미로운 점을 많이 발견했습니다. 경험해 보고 나중에는 hibernate 검색과 전체 텍스트 검색을 사용하는 것이 유용하므로 변경할 수 없습니다. 어쨌든 기본 sql 또는 hql을 작성할 수 있으며 보조 주석은 다음과 같습니다. 또한 유연합니다. 기본 SQL과 다른 one2many 및 Many2many 데이터 구조를 생성할 수도 있습니다. 즉, 그는 매우 포괄적인 사람입니다. 아직 후회하지 않았다면 계속 학습하세요. 일반적으로 최대 절전 모드 도구는 모든 테이블의 Java 및 XML 매핑을 자동으로 생성하여 일반 검색, 삭제 및 수정을 수행한 다음 Java 코드를 복사하고 이름을 바꾸고 주석을 사용하여 수동으로 연결을 생성하고 불필요한 필드를 삭제하는 데 사용됩니다.
PHP中文网2017-04-18 09:34:16
Hibernate를 잘못 사용하면 다음과 같은 일이 발생합니다. P
예를 들어, Hibernate의 객체 A에 포함된 객체 B의 로딩이 기본 지연 로딩에서 사전 로딩으로 변경되면(영향을 이해하지 못한다고 가정하면, 구성만 변경), 개체 A의 목록을 쿼리하려는 경우 N+1 쿼리가 있지만 대부분의 비즈니스 논리는 포함된 개체 B를 읽을 필요가 없으며 성능이 매우 저하됩니다.
그리고 일반적으로 MyBatis의 경우 이런 종류의 쿼리를 직접 작성해야 합니다.
JPA(Hibernate)는 정말 광범위한 콘텐츠를 다루며 많은 최적화 기술을 갖추고 있습니다. (제가 가지고 있는 Hibernate In Action 책은 매우 두껍고 어렵습니다. 읽은 후 읽는 데 오랜 시간이 걸렸습니다.) 얼마나 많은 프로그래머가 읽기를 좋아하고 인내심을 가지고 있는지 모르겠습니다.
그러나 MyBatis는 시작하기가 훨씬 쉽습니다. 잘못 사용하면 Hibernate보다 성능이 몇 배나 떨어지지만 MyBatis는 그렇게 복잡하지 않으므로 실수할 가능성이 훨씬 적습니다.
Hibernate에 관심이 많고 익숙해지고 싶다면 한번 시도해 볼 것을 제안합니다. 결국 대부분의 프로젝트는 신속하게 결과를 내야 합니다.
이 점에서 Hibernate는 MyBatis보다 간단합니다. (물론 MyBatis에는 코드를 자동으로 생성하는 방법이 있지만 여전히 훨씬 더 번거롭습니다.)
후속 프로젝트가 잘 개발되고 여러 사람이 개발에 협력해야 하는 경우 초보자가 프로젝트에 참여하지 못하도록 하세요. 지속성 레이어 코드 로직.
黄舟2017-04-18 09:34:16
간단히 말하면 Hibernate는 객체 지향이고 MyBatis는 SQL 지향입니다. 어느 것을 선택하는지는 직원이 어느 것에 익숙한지, 비즈니스에 복잡한 쿼리가 많은지, 높은 성능 요구 사항이 있는지 여부에 따라 달라집니다. 게다가 사람들은 Hibernate에 익숙하지 않아서 Hibernate가 이것을 할 수 없거나 그것을 하는 것이 매우 복잡하다고 느끼는 경우가 많다. Hibernate는 이 책임을 지지 않겠다고 말했습니다. . .
PHPz2017-04-18 09:34:16
이제 개발 중에 테이블 연관 없이 논리적 외래 키를 사용하므로 개발 효율성은 거의 동일합니다. Mybatis는 간단하고 명확하며 SQL은 더 다양하며 협업은 약간 더 편리합니다.
巴扎黑2017-04-18 09:34:16
기술은 좋고 나쁨이 아니라 적합 여부만 있을 뿐이며 특정 상황에서 특정 문제를 해결할 수 있습니다. 최대 절전 모드를 사용하는 사람마다 다른 결과가 나타납니다. 최대 절전 모드에 능숙하다면 성능은 문제가 되지 않습니다. 위에서 언급한 두 가지 비교를 너무 많이 보았지만 실제로는 별 의미가 없습니다.
ringa_lee2017-04-18 09:34:16
일반적으로 최대 절전 모드는 유연성이 부족하고 캡슐화가 너무 깊습니다. Mybatis는 원하는 대로 원하는 작업을 구성할 수 있습니다