JDBC VS 동면
우리는 웹 애플리케이션에서 아주 오랫동안 JDBC를 사용해 왔습니다.우리가 이것을 사용한 주된 이유는 코드, sql 및 수정 작업을 우리 손으로 100% 제어하기 때문입니다.그 외에도 데이터베이스 내부에 트리거를 사용했으며, 데이터베이스는 DB 전문가에 의해 별도로 개발됩니다.
그러나 많은 사람들이 현재 사용을 권장하고 있습니다.Hibernate
그래서 저희도 한번 써볼까 생각했습니다.그러나 아래의 문제점을 발견하였습니다.
최대 절전 모드는 "기존" 데이터베이스와 연결할 수 없습니다.그것은 항상 자신만의 것을 만들기 위해 노력합니다.
데이터베이스는 서로 다른 플랫폼(클라우드, 서버, VPS, 퍼스널 컴퓨터)에 있는 동일한 애플리케이션을 통해 액세스할 수 있습니다.이러한 상황에서 최대 절전 모드는 캐싱 때문에 문제를 일으킬 수 있습니다.
우리는 자바 코드에 "테이블 만들기 작업"을 주는 것을 결코 좋아하지 않습니다.우리는 항상 수동으로 테이블을 만듭니다.
매우 길고 복잡한 SQL 문을 사용해야 할 수도 있습니다.지난 번에는 150개 이상의 행이 있는 문장을 사용했고, 20개 이상의 표를 결합했습니다.동면에 관한 한 우리가 이 문제에 직면할지는 의문입니다.
우리의 SQL 코드는 훌륭하고 표준적입니다.동면 상태에서 생성된 코드는 우리에게 조금 더럽게 느껴집니다.
우리는 항상 MySQL을 사용합니다.다른 DB는 절대 사용하지 마십시오.
우리가 만든 애플리케이션은 의료와 관련된 최대한의 보안이 필요합니다.적어도 하나 이상의 데이터 기록이 유출되면 우리는 끝입니다.
이 많이 .
foreign keys
,Primary Keys
,Composite Keys
,Unique Keys
데이터베이스에 있는 등.포럼에서 일부는 하이버네이트가 그것들을 망쳤다고 불평했습니다.우리는 일부 사람들이 "당신이 소프트웨어 엔지니어입니까?"라고 주장하기 때문에 동면을 시도하기로 결정했습니다. 죽은입니다를 .
JDBC
!!. "
이러한 점들을 고려하여 위 사항들이 실제로 사실인지 여부를 알려주시기 바랍니다.(말씀드린 것처럼 구글링, 토론 등을 통해 알게 되었습니다.)그리고 Hibernate VS Java JDBC의 장단점은 무엇입니까?
위에 나열된 문제에 대한 답변:
1. 최대 절전 모드는 "기존" 데이터베이스와 연결할 수 없습니다.그것은 항상 자신만의 것을 만들기 위해 노력합니다.
이는 잘못되었다.최대 절전 모드는 기존 데이터베이스에 연결할 수 있으며 항상 데이터베이스를 재생성하려고 시도하는 것은 아닙니다.매개 변수를 꺼야 합니다.hbm2ddl. auto
.
2. 데이터베이스는 서로 다른 플랫폼(클라우드, 서버, VPS, 퍼스널 컴퓨터)에 있는 동일한 애플리케이션을 통해 액세스할 수 있습니다.이러한 상황에서 최대 절전 모드는 캐싱 때문에 문제를 일으킬 수 있습니다.
하이버네이트에는 조정 가능한 캐시가 있으므로 이 또한 문제가 되지 않습니다.
3. 우리는 자바 코드에 "테이블 만들기 작업"을 주는 것을 결코 좋아하지 않습니다.우리는 항상 수동으로 테이블을 만듭니다.
괜찮아요.위의 페이지 1을 참조.또한 간접 테이블 생성 및 업데이트(예: liquibase)를 위한 몇 가지 편리한 라이브러리가 있으며, 이 라이브러리는 완벽하게 동면과 함께 사용할 수 있습니다.
4. 매우 길고 복잡한 SQL 문을 사용해야 할 수도 있습니다.지난 번에는 150개 이상의 행이 있는 문장을 사용했고, 20개 이상의 표를 결합했습니다.동면에 관한 한 우리가 이 문제에 직면할지는 의문입니다.
필요한 경우 항상 직접 JDBC 호출을 사용하고 최대 절전 모드를 통해 네이티브 SQL 쿼리를 호출할 수 있습니다.
5. 우리의 SQL 코드는 훌륭하고 표준적입니다.동면 상태에서 생성된 코드는 우리에게 조금 더럽게 느껴집니다.
다시 말하지만 자동 생성된 최대 절전 모드 대신 복잡한 논리 SQL 코드를 호출해야 한다면 그렇게 할 수 있습니다.
6. 우리는 항상 MySQL을 사용합니다.다른 DB는 절대 사용하지 마십시오.
전혀 문제없습니다. 지원:한 MySQL을다다을nl:한y는tysellorg.hibernate.dialect.MySQLDialect
.
7. 우리가 만든 애플리케이션은 의료와 관련된 최대한의 보안이 필요합니다.적어도 하나 이상의 데이터 기록이 유출되면 우리는 끝입니다.
보안 문제는 ORM 기법과 관련이 없습니다.Hibernate
순수 데이터베이스 JDBC 호출과 프로그래머 도구 사이의 논리적이고 편리한 객체 지향 계층일 뿐입니다.그것은 공동의 인터넷 보안에 어떤 식으로든 영향을 미치지 않습니다.
동면은 훌륭한 도구이며 이에 대한 많은 문서, 책 및 블로그 기사를 찾을 수 있습니다.
모든 고민을 해결해 드리겠습니다.
최대 절전 모드는 "기존" 데이터베이스와 연결할 수 없습니다.그것은 항상 자신만의 것을 만들기 위해 노력합니다.
Hibernate는 통합 테스트를 위해서도 별도의 데이터베이스 스키마 관리 절차를 사용해야 합니다.Flyway와 같은 증분 버전 도구를 사용해야 합니다.스키마 변경을 관리하는 DB.
데이터베이스는 서로 다른 플랫폼(클라우드, 서버, VPS, 퍼스널 컴퓨터)에 있는 동일한 애플리케이션을 통해 액세스할 수 있습니다.이러한 상황에서 최대 절전 모드는 캐싱 때문에 문제를 일으킬 수 있습니다.
타사 캐싱 구현을 사용하는 2차 레벨 캐시를 사용하지 않아도 됩니다.모든 캐싱 솔루션은 트랜잭션 일관성을 깨뜨릴 수 있습니다.첫 번째 레벨 캐시는 세션 수준의 반복 가능한 읽기를 보장하며 최적의 잠금 기능을 통해 업데이트 손실을 방지할 수 있습니다.
우리는 자바 코드에 "테이블 만들기 작업"을 주는 것을 결코 좋아하지 않습니다.우리는 항상 수동으로 테이블을 만듭니다.
DB는 ORM 툴과 분리되어 있어야 합니다.어쨌든 그게 최선의 연습입니다.
매우 길고 복잡한 SQL 문을 사용해야 할 수도 있습니다.지난 번에는 150개 이상의 행이 있는 문장을 사용했고, 20개 이상의 표를 결합했습니다.동면에 관한 한 우리가 이 문제에 직면할지는 의문입니다.
최대 절전 모드는 쓰기 작업 및 동시성 제어에 적합합니다.고급 쿼리(윈도우 함수, CTE)에는 여전히 네이티브 SQL을 사용해야 합니다.그러나 Hibernate를 사용하면 기본 쿼리를 실행할 수 있습니다.
우리의 SQL 코드는 훌륭하고 표준적입니다.동면 상태에서 생성된 코드는 우리에게 조금 더럽게 느껴집니다.
필요도 없고 어차피 hbmdll 유틸리티를 사용하면 안 됩니다.
우리는 항상 MySQL을 사용합니다.다른 DB는 절대 사용하지 마십시오.
그게 더 좋군요.따라서 데이터베이스 이동성 문제를 고려하지 않고 사전 기본 쿼리를 사용할 수 있습니다.
우리가 만든 애플리케이션은 의료와 관련된 최대한의 보안이 필요합니다.적어도 하나 이상의 데이터 기록이 유출되면 우리는 끝입니다.
최대 절전 모드를 사용해도 데이터베이스나 데이터 액세스 코드를 보호할 수 없습니다.최대 절전 모드에서도 데이터베이스 보안 조치를 사용할 수 있습니다.Jasypt를 사용하여 모든 종류의 보안 관련 기능을 활성화할 수도 있습니다.
- 고급 암호 해싱
- 양방향 암호화
데이터베이스에는 수많은 외부 키, Primary Key, Composite Key, Unique Keys.포럼에서 일부는 하이버네이트가 그것들을 망쳤다고 불평했습니다.
이 모든 것은 Hibernate에 의해 지원됩니다.JPA 규칙 외에도 Hibernate는 이색적인 매핑을 위한 특별한 매핑도 제공합니다.
우리는 일부 사람들이 "당신이 소프트웨어 엔지니어입니까?"라고 주장하기 때문에 동면을 시도하기로 결정했습니다.당신은 이미 죽은 JDBC를 사용하고 있습니다!!"
이는 이미 마스터링한 라이브러리에서 전환하는 것에 대한 올바른 주장이 아닙니다.Hibernate를 사용함으로써 이익을 얻을 수 있다고 생각한다면, 그것이 JDBC에서 전환해야 하는 유일한 설득력 있는 이유입니다.
기존 JDBC를 사용한다고 해서 IT 업계에서 부족한 것은 아니며, Hibernate도 기본 계층에서 JDBC를 사용합니다.
그것이 우리가 찾아야 할 것을 우리에게 어떤 이점을 주는지를 알려줍니다.
1.)Cache
매커니즘.
2.) 관리sessions
,transactions
기타.
3.) 쿼리 작성 노력 감소, 최대 절전 모드와 같은 더 많은 유틸리티 사용Query API
,Criteria API
,HQL
제기한 질문은 최대 절전 모드 문서에서 어느 정도 다룹니다.
또한 캐시, infinispan, 우리가 배포하는 서버, JBOSS, Weblogic, Tomcat 등 ++ 환경, 클라우드, 분산 캐시 등에 따라 훨씬 더 많은 캐싱 전략을 사용할 수 있습니다.
Hibernate(동면)는 스키마를 자동으로 작성하지 않고 자신이 작성한 스키마를 가리킬 수 있는 옵션을 제공합니다.
여기 제가 아는 빠른 답변들이 있습니다.
1) 기존 데이터베이스에 연결할 수 있습니다.하지만 여기에 명시된 것처럼
만약 당신이 확실한 물체 모델을 가지고 있지 않다면, 저는 Hibernate가 끔찍한 선택이라고 말하고 싶습니다.
2) 데이터베이스는 여러 응용프로그램에서 액세스하므로 잠금을 유지할 수 있습니다.반면에 여기서 한 것처럼 캐싱을 끌 수도 있습니다.
3) 테이블을 수동으로 만들고 다음을 사용하여 연결할 수 있습니다..hbm.xml
파일.
4) 간단한 SQL 쿼리 조건처럼 최대 절전 모드에서 모든 유형의 쿼리를 사용할 수 있습니다.
5) 원한다면 하이버네이트에서 SQL 코드를 직접 사용할 수 있습니다.다른 옵션은 기준을 사용하는 것입니다.
6) 최대 절전 모드는 DB 특정한 것이 아닙니다.모든 데이터베이스를 찾아 최대 절전 모드로 연결할 수 있습니다.
7) 잠금을 사용하고 데이터베이스에 권한을 부여하면 보안을 유지할 수 있습니다.
8) 잘 다루지 않으면 동면 상태에서 외국 열쇠가 지저분하다는 것에 동의했습니다.따라서 OOO의 접근 방식을 사용하고 계단식을 잘 유지한 다음, Hibernate를 선택하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/28163670/jdbc-vs-hibernate
'programing' 카테고리의 다른 글
왜 이 PHP 스크립트(AJAX에 의해 호출됨)가 무작위로 SESSION을 로드하지 않습니까? (0) | 2023.09.16 |
---|---|
Spring Data 저장소에서 Spring의 선언 캐싱 지원을 테스트하는 방법은 무엇입니까? (0) | 2023.09.16 |
"유명화�새"와 같이 데이터베이스를 마이그레이션한 후 알 수 없는 캐릭터 (0) | 2023.09.16 |
BatchUpdateException: 배치가 종료되지 않습니다. (0) | 2023.09.16 |
MySQL 쿼리 - SUM of COUNT 사용 (0) | 2023.09.16 |