복붙노트

[SQL] 자바 프로그래밍 - SQL 문이 저장되어야 하는가? [닫은]

SQL

자바 프로그래밍 - SQL 문이 저장되어야 하는가? [닫은]

어디 JDBC 호환 응용 프로그램은 SQL 문 이유를 저장해야합니까?

지금까지, 나는 이러한 옵션을 식별하기 위해 관리 :

각각의 "프로"와 "단점"는 무엇입니까?

해야 SQL 코드는 "코드"또는 "메타 데이터"고려?

절차는 성능 최적화를 위해 사용하거나 데이터베이스 구조의 합법적 인 추상화되어 저장해야 하는가?

성능이 중요한 요소 결정인가? 공급 업체에 종속 어떻습니까?

더 나은 무엇입니까 - 느슨한 결합 또는 꽉 커플 링 그 이유는?

편집 됨 : 답변 당신에게 모두 감사 - 여기에 요약입니다 :

메타 데이터 기반 즉 개체 관계 매핑 (ORM)

장점 :

단점 :

하드 / DAO 계층에 캡슐화

장점 :

단점 :

저장 프로 시저

장점 :

단점 :

외부 파일 (예를 들어, 속성 또는 리소스 파일)

프로

단점 :

SQLJ 절에 포함

장점 :

단점 :

해결법

  1. ==============================

    1.일반적으로, 더 많은 응용 프로그램의 크기 및 / 또는 재사용 측면에서 성장, 더 많은 필요성에이 구체화 된 / abstractize SQL 문입니다.

    일반적으로, 더 많은 응용 프로그램의 크기 및 / 또는 재사용 측면에서 성장, 더 많은 필요성에이 구체화 된 / abstractize SQL 문입니다.

    (정적 최종 상수로) 하드 첫 단계이다. 파일 (특성 / XML 파일)에 저장된 다음 단계입니다. 메타 데이터 (하이버 네이트 / JPA 같은 ORM 수행으로) 구동되는 마지막 단계이다.

    하드 코드는 코드가 DB 별이 될 가능성이 있다는 단점이있다 당신은 / 다시 모든 변화 / 재분배를 재 구축 할 필요가있다. 장점은 한 장소에 가지고있다.

    파일에 저장된 응용 프로그램이 성장 때 이상 유지할 될 수있는 단점이있다. 이점은 / 다시 당신이 추가 DAO 메소드를 추가 할 필요가없는 경우, 응용 프로그램을 다시 할 필요가 없다는 것입니다.

    구동 메타 데이터 모델 코드가 매우 빡빡 데이터베이스 모델과 연결되어 있다는 단점이있다. 데이터베이스 모델의 모든 변화를 위해 당신은 / 재분배 코드를 / 다시 재건해야합니다. 장점은 매우 추상적이라는 것이다 당신은 쉽게 모델을 변경할 필요없이 DB 서버로 전환 (하지만 지금은 자신을 요청할 수 있음 : 얼마나 자주 것 DB 서버에서 회사 전환 가능성이 적어도 한 번 삼년 당, ISN ' 그것을 마에?).

    나는 이것에 대한 "좋은"솔루션 스토어드 프로 시저를 호출하지 않습니다. 그들은 완전히 다른 목적을 가지고있다. 비록, 코드가 사용 된 DB / 구성에 따라 달라질 수있다.

  2. ==============================

    2.이 최적인지는 모르겠지만, 내 경험에 그들은 DAO 층에서 하드 코딩 (즉, 문자열 리터럴)를 끝낸다.

    이 최적인지는 모르겠지만, 내 경험에 그들은 DAO 층에서 하드 코딩 (즉, 문자열 리터럴)를 끝낸다.

  3. ==============================

    3.나는 그것이 오히려 큰 질문으로 당신이 원하는 아래 사람이 당신에게 프로 / 콘 휴식을 줄 것이라고 생각하지 않습니다. 그래서 그 대신 여기에 내가 과거에 사용했던 것입니다, 나는 앞으로 사용하게 될 것.

    나는 그것이 오히려 큰 질문으로 당신이 원하는 아래 사람이 당신에게 프로 / 콘 휴식을 줄 것이라고 생각하지 않습니다. 그래서 그 대신 여기에 내가 과거에 사용했던 것입니다, 나는 앞으로 사용하게 될 것.

    나는 DAL에서 하드 코드 된 SQL을 사용하여 사용합니다. 나는 DBA는이 SQL과 경기하기를 원했지만 때까지이 괜찮다고 생각했다. 그런 다음, 그것을 발굴의 DBA에 화재를 통해 포맷해야합니다. 그것을 누가 웃게하고 모두 교체합니다. 그러나 좋은 물음표 또는 잘못된 순서로 물음표와 당신을 떠나지 않고 다시 자바 코드에 대항 할 수 있습니다.

    우리는 또한 ORM을 사용하고,이 개발자에 좋은 곳입니다 동안 그들을 비웃을위한 아무 SQL이 없기 때문에 우리의 DBA는 싫어. 우리는 또한 데이터베이스를 죽이는 습관을 가진 이상한 ORM (제 3 자 공급 업체에서 사용자 정의 하나)을 사용했다. 나는 이후 JPA를 사용하고 큰했지만, DBA가 과거를 사용하여 복잡한 아무것도 얻는 것은 최대 언덕 전투입니다했습니다.

    우리는 지금 (하드 코딩 호출 문) 저장 프로 시저를 사용합니다. 이제에 대한 불평 할 것이다 첫번째 것은 모두가 데이터베이스에 연결되어 있다는 점이다. 너는. 그러나 얼마나 자주 당신은 데이터베이스를 변경? 나는 우리가 단순히 심지어 그것에 의존 플러스 우리의 DBA가 재교육을 더한 데이터를 마이그레이션 다른 코드의 양을 그것을 시도하지 수 있다는 사실을 알고있다. 그것은 매우 비용이 많이 드는 작업이 될 것입니다. 당신의 세계 모자의 드롭에 DB를 변경의 경우에는 필요 SP의 가능성이 밖으로있다.

    앞으로 나는 오라클 패키지에서 자바 클래스를 생성하는 코드 생성 도구를 사용하여 저장 프로 시저를 사용하고 싶습니다.

    편집 2013-01-31은 : 몇 년와 DBA 나중에 우리는 지금 절대적으로 필요한 경우에만 (DB에 저장된 발동을) SQL에 가고, 최대 절전 모드를 사용합니다. 내 생각이 가장 좋은 솔루션입니다. 시간의 99 %는 데시벨은 SQL에 대해 걱정할 필요하고, 그들이 1 %는 그들이에 이미 편안 장소에서하지 않습니다.

  4. ==============================

    4.ORM (예 : 최대 절전 모드 등)를 사용해서 당신은 희망 걱정할 SQL 문이 없습니다. 성능은 일반적으로 허용하고 당신은뿐만 아니라 공급 업체 독립성을 얻을.

    ORM (예 : 최대 절전 모드 등)를 사용해서 당신은 희망 걱정할 SQL 문이 없습니다. 성능은 일반적으로 허용하고 당신은뿐만 아니라 공급 업체 독립성을 얻을.

  5. ==============================

    5.암호.

    암호.

    저장 프로 시저가 다른 저장 프로 시저의 내부를 포함하여 재사용 할 수 있습니다. 트래픽의 최소 금액이 이상적입니다 - 데이터베이스에 하나의 여행을 &가 지원하는 명령을 실행할 수 있음이 의미합니다. ORM 또는 SPROC의 DB 및 다시가는 와이어의 시간은 회수 할 수없는 무언가이다.

    ORM이 때문에 추상화의 최적화에 적합하지 않습니다. 에서보고 데이터베이스 어렵게 - IME는, ORM은 referencial 무결성의 부족을 의미합니다. 무엇 복잡성에 저장 한 것은, 지금 가능한 방식으로 데이터를 얻을 수있을 증가했다.

    아니, 단순성이다. SQL은 상대적으로 표준화되어 있지만, 일을하는 벤더 특정의 방법은 아직 없습니다 - 공급 업체 로크 인뿐만 아니라 데이터베이스와 발생합니다.

  6. ==============================

    6.자바 세계에서 잠금 공급 업체의 두려움이 흥미 롭다.

    자바 세계에서 잠금 공급 업체의 두려움이 흥미 롭다.

    난 당신이 오라클 엔터프라이즈를위한 $ 50000 홍보 CPU를 지불하고 단지 MySQL로 전환하려면 어떤 분 최소한의 공통 분모를 사용하지 않은 바랍니다. 좋은의 DBA가 당신을 말할 것이다로서, 특히 잠금 모델에 관해서는 그들이 어떻게 일관성을 유지와 다른 큰 이름 데이터베이스 간의 미묘한 차이가있다.

    이렇게위한 진짜 (사업) 이유가있다 - 그래서, 유일한 업체 불가지론 SQL의 원칙에 따라 SQL 호출을 구현하는 방법에 대한 결정을하지 않습니다.

  7. ==============================

    7.SQL 내부 저장 프로 시저가 데이터베이스 시스템 최적화 및 속도를 컴파일 -의 자연의 집이. SQL은 데이터베이스 시스템에 의해 분석 데이터베이스 시스템에 의해 이해된다. 당신이 할 수있는 경우 데이터베이스에 SQL을 유지; 저장 프로 시저 또는 함수 또는 데이터베이스 시스템이 제공하는 논리의 어떤 단위를 포장, 당신 또는 누군가 다른 언급 한 도구 중 하나를 사용하여 간단한 전화를합니다.

    SQL 내부 저장 프로 시저가 데이터베이스 시스템 최적화 및 속도를 컴파일 -의 자연의 집이. SQL은 데이터베이스 시스템에 의해 분석 데이터베이스 시스템에 의해 이해된다. 당신이 할 수있는 경우 데이터베이스에 SQL을 유지; 저장 프로 시저 또는 함수 또는 데이터베이스 시스템이 제공하는 논리의 어떤 단위를 포장, 당신 또는 누군가 다른 언급 한 도구 중 하나를 사용하여 간단한 전화를합니다.

    왜 DB 외부 데이터베이스 시스템에 저장하는 SQL 코드? 자주 개발의 속도. 왜 사용 ORM 매핑? - 일부 말의 ORM 매핑은 다른 데이터베이스 시스템에서 호환성을 제공합니다; 그러나 그것은 복제와 같은 고급 기능을 사용하기 시작, 특히이 지어진에 거의 현실 세계에서 응용 프로그램 적 데이터베이스 플랫폼에서 멀리 이동하지 않고, 드문 경우를 위해 데이타베이스 시스템이 스왑 아웃되는 일이 않는 몇 가지 작업은 보증 . 나는 SQL 지식의 부족으로 종종 대체 ORM의 단점 중 하나 믿거 나 DB에 코드 관리의 부족. 또한 ORM은 근접 할 경우에도 기본 데이터베이스 성능을 일치하지 않습니다.

    나는 데이터베이스에 SQL 코드를 유지하고 API를 통해 간단한 호출을하거나 사용하고자하는 인터페이스의 측면에 서 있어요. 만약 당신이 데이터 소스의 새로운 종류의 스왑을 할 경우에도 추상적 멀리 데이터베이스 호출이 추상 클래스 나 (방법으로 표현) OO 인터페이스 뒤에 그 전화를 넣어 만들어지는 시점은, 그래서 비즈니스 계층에 원활하게 될 것입니다 .

  8. ==============================

    8.당신은 그 명확한 답을 가지고 물어 유일한 질문은 "SQL 코드 또는 메타 데이터?"입니다 그것은 가장 확실히 코드와 같은 소스 코드 제어의 일종에 보관하고 쉽게 최신 버전으로 업데이트하고 일이 잘못되지 않을 경우 때 다시 롤링 시스템을 가지고해야합니다.

    당신은 그 명확한 답을 가지고 물어 유일한 질문은 "SQL 코드 또는 메타 데이터?"입니다 그것은 가장 확실히 코드와 같은 소스 코드 제어의 일종에 보관하고 쉽게 최신 버전으로 업데이트하고 일이 잘못되지 않을 경우 때 다시 롤링 시스템을 가지고해야합니다.

    나는 응용 프로그램에서 SQL을 수행하는 세 가지 방법을 본 적이 각각은 장단점이있다. 아무 가장 좋은 방법은 없지만, 가장 좋은 것은 그냥 사용하여 응용 프로그램과 막대기로 잘 작동 하나를 선택한다.

  9. ==============================

    9.우리는 최대 절전 모드와 같은 ORM들을보다 금속에 가까운 iBatis를 SQL 매퍼를 사용하는 일이. iBatis를 당신은 클래스 패스에있을 필요가 리소스 파일 (XML)에 SQL 문을 넣어.

    우리는 최대 절전 모드와 같은 ORM들을보다 금속에 가까운 iBatis를 SQL 매퍼를 사용하는 일이. iBatis를 당신은 클래스 패스에있을 필요가 리소스 파일 (XML)에 SQL 문을 넣어.

    당신이 @ ocdecio의 ORM 옵션을 추가 할 경우 접근 방법의 목록은 매우 포괄적 인 것 같다. 나는 ORM을 사용하고 SQL 매퍼를 사용하여 리소스 파일이 가장 멋진 두 방식 것을 말할 것입니다. 나는 많은 이해와 너무 밀접하게 자바 관계 당신을 보지 않은 SQLJ에서 놀지 것입니다. 또한 그들은 특정 데이터베이스 공급 업체에 당신을 묶어 때문에 (표준은 거의 저장 프로 시저에 대한 존재하지 않는다), 저장 프로 시저에서 멀리있어.

  10. ==============================

    10.우리의 대부분과 마찬가지로, 나는 전체 범위를 본 적이 있지만, 우리는 SQL 일류 언어 고려해야합니다. 난 다시 다음 아래로 끌어 실행되는 DB에 저장된 SQL을 보았다.

    우리의 대부분과 마찬가지로, 나는 전체 범위를 본 적이 있지만, 우리는 SQL 일류 언어 고려해야합니다. 난 다시 다음 아래로 끌어 실행되는 DB에 저장된 SQL을 보았다.

    가장 성공적인 시스템 나는 고용 저장 프로 시저, 함수 및 뷰를 보았다.

    저장 발동는 DB의 SQL 텍스트 등을 유지하고 (이를 지원하기 위해 적절한 디자인이 많이 필요합니다) 그 배포하고 사용자 정의하여 상대적으로 즉시 변경을 할 수 있습니다.

    모든 돌출부가 동일한 이유로보기 간단한 선택되어야 통해 모든 투영 논리 뷰 내에 포함되어야한다.

  11. ==============================

    11.나는 공장 레이아웃의 DAO를 사용하는 것이 좋습니다. 예제는 객체 그래서 당신은 될 필요 :

    나는 공장 레이아웃의 DAO를 사용하는 것이 좋습니다. 예제는 객체 그래서 당신은 될 필요 :

    public class CoolBusinessObject
    public class DAOFactory.java
    public implementation CoolBusinessOjectDAO
    public class CoolBusinessOjectDAOOracleImpl implements CoolBusinessOjectDAO
    

    이 스타일 레이어 데이터의 상호 작용, 당신은 단지 당신이 데이터베이스를 전환하는 경우 코드의 한 레이어를 변경하거나 ORM 기술로 이동해야하므로.

  12. ==============================

    12.이 세 사이에 상당한 차이가 전혀 없습니다 :

    이 세 사이에 상당한 차이가 전혀 없습니다 :

    난 당신이 자바 코드에 직접 문자열 형식에 포함 된 SQL 코드에 거라고 믿고있어. 1과 3은 아마 직접 JDBC를 사용 (또는 아파치 DbUtils과 같은 몇 가지 도구) 동안, 2 이전 컴파일에 관련된 JDBC 코드를 생성, 스택에 전처리 기술을 추가합니다.

    이 솔루션은 SQL을 내장과 관련되면 그래서, 기본적으로, 당신은뿐만 아니라 이러한 기술 중 하나를 사용할 수 있습니다 :

    또한보다 SQLJ를 통해 또는 실제 문자열 연결을 통해 더 많은 형태 보증 방식으로 자바에서 SQL을 포함 할 수 있도록 다른 도구가있을 수 있습니다.

  13. ==============================

    13.어떤 경험에서, 나는 DAO 널리 사용되는 것입니다 오브젝트에 열심히하지만, SQL 문을 코딩 있었다, 나는 그것이 가장 선호하는 방법이어야한다고 생각합니다. 가장 좋은 방법은 프로퍼티 파일의 SQL 문을 저장해야합니다. 그리고 등록 정보 파일에 대한 인터페이스를 통해 DAO 객체의 문을 얻을, java.util.Properties들은 말한다. SQL 문은 '?'산재 준비된 명령문 접근 방식을 통해 매개 변수를 전달하는이야 할 수 있습니다.

    어떤 경험에서, 나는 DAO 널리 사용되는 것입니다 오브젝트에 열심히하지만, SQL 문을 코딩 있었다, 나는 그것이 가장 선호하는 방법이어야한다고 생각합니다. 가장 좋은 방법은 프로퍼티 파일의 SQL 문을 저장해야합니다. 그리고 등록 정보 파일에 대한 인터페이스를 통해 DAO 객체의 문을 얻을, java.util.Properties들은 말한다. SQL 문은 '?'산재 준비된 명령문 접근 방식을 통해 매개 변수를 전달하는이야 할 수 있습니다.

    이러한 접근 방식은 애플리케이션의 비즈니스 로직에서 SQL 로직을 분리하는 데 도움이됩니다. 이 응용 프로그램 logic.Understandability도 향상 내에서 데이터베이스 문을 검색 할 필요가 없습니다 쉽게 수정하게 모든 SQL 문을 사용할 수있는 중앙 저장소를 만든다.

  14. ==============================

    14.광산 자원 번들에서 생을 마감. 나는 정상이 아니다 알고 있지만 그것이 나와 "나보다 다른 '누군가를위한 가장 쉬운 유지합니다. 그것은 간단하고 논리적이다.

    광산 자원 번들에서 생을 마감. 나는 정상이 아니다 알고 있지만 그것이 나와 "나보다 다른 '누군가를위한 가장 쉬운 유지합니다. 그것은 간단하고 논리적이다.

    사실 사람이 또한 나의 접근 방식을 사용하는지 궁금 해요.

  15. ==============================

    15.rexem 쓴 것처럼 SQL 문에서도 코드 - 그들은이 (당신이 좋은 이유가 unles)을 구체화하지, 코드처럼 취급하지만, 코드를 배치해야 그 /에서 해당 제표에 공정 SQL 데이터. 프레임 워크으로 ORMs 오늘 / iBATIS는 일상 JDBC 개발을위한 단순화를 많이 제공합니다.

    rexem 쓴 것처럼 SQL 문에서도 코드 - 그들은이 (당신이 좋은 이유가 unles)을 구체화하지, 코드처럼 취급하지만, 코드를 배치해야 그 /에서 해당 제표에 공정 SQL 데이터. 프레임 워크으로 ORMs 오늘 / iBATIS는 일상 JDBC 개발을위한 단순화를 많이 제공합니다.

    귀하의 질문에 어떤 대답이 질문에서 찾을 수 있습니다 : 당신의 SQL 문에서도이 저장하는 방법의 문제는 응용 프로그램의 왕의 따라 달라집니다. 요구 사항은 무엇입니까? 잠금 높은 보안 코드를 작성 또는 유지 보수, 크로스 플랫폼 또는 공급 업체의 용이성? 다음 질문은 당신이 좋은 것 순수한 SQL 또는 ORM 프레임 워크를 필요합니까?

    * Hardcoded in business objects
    * Encapsulate in separate classes e.g. Data Access Objects
    

    간단한 해결책 (P), 유지하기 어렵다 (C)

    * Embedded in SQLJ clauses
    

    더 나은 문법 검사 (P)는, 아니 너무 인기 (C), OD 동적 쿼리 (C), JDBC (C)보다 낮은 성능 부족

    * Metadata driven (decouple the object schema from the data schema - describe the mappings between them in metadata)
    

    ) 그것은 당신이 그 (C)를해야 할 특정 케이스 일 경우 또는 평균 ORM (P)해야한다

    * External files (e.g. Properties or Resource files)
    

    쉬운 유지 (P)하지만 열심히 오류를 확인하기 위해 (C)

    * Stored Procedures
    

    높은 보안 (P)는 하드 코드 잠금 문제 공급 업체를 유지하기 위해 (C)

  16. from https://stackoverflow.com/questions/1661921/java-programming-where-should-sql-statements-be-stored by cc-by-sa and MIT license