sql mapper

개발자가 작성한 SQL문으로 해당되는 ROW를 읽어 온 후 결과 값을 오브젝트화 시켜 사용가능하게 만들어준다.

장점

1 resultSet에서 데이터 일일이 꺼내서 객체에 매핑할 필요 無

SQL문을 이용하여 RDB에 접근, 데이터를 오브젝트(객체)화 시켜준다.

2 JPA에 비해 쉽다.

SQL 쿼리를 그대로 사용하기에 복잡한 Join, 튜닝 등을 좀 더 수월하게 작성 가능하다.

3 SQL의 세부적인 내용 변경 시 좀 더 간편하다.

4 동적 쿼리 사용 시 JPA보다 간편하게 구현 가능하다.

단점

  1. 데이터 베이스 설정 변경 시 수정할 부분이 너무 많다. (Oracle의 페이징 쿼리를 MySQL에서 사용 불가능!)

  2. Mapper작성부터 인터페이스 설계까지 JPA보다 많은 설계와 파일, 로직이 필요하다.

  3. 특정 DB에 종속적이다.

    RDBMS에 따라 SQL 문법이 다르기 때문에 특정 RDB에 종속적이다.

orm

장점

1 ORM은 SQL을 작성하는 반복 작업을 줄여줘서 생산성을 높이고, 유지보수도 수월하게 해준다.(내부에서 생성)

테이블 생성, 변경, 관리가 쉽다. (JPA를 잘 이해하고 있는 경우)

테이블 생성, 변경 등 엔티티 관리가 간편하다.

위 말의 뜻은 select * from user 같은 쿼리를 직접 작성할 필요 없이 Java 코드로 간편하게 사용할수 있다는 뜻

2 ORM은 패러다임 불일치 문제를 해결해준다.

=> 상속, 연관관계를 표현하는 방식이 객체모델과 관계형DB모델에서 다르기 때문에 발생

3 ORM은 DBMS에 대한 종속성을 줄여준다.

프로그래머는 Object에 집중함으로 극단적으로 DBMS를 교체하는 거대한 작업에도 비교적 적은 리스크와 시간이 소요된다.

모델에서 가공된 데이터를 컨트롤러에 의해 뷰와 합쳐지는 형태로 디자인 패턴을 견고하게 다지는데 유리하다.

여러 DB 벤더마다 쿼리 사용이 조금씩 다르기 때문에 애플리케이션 개발 시 처음 선택한 DB를 나중에 바꾸는 것은 매우 어렵다.그런데 JPA는 추상화된 데이터 접근 계층을 제공하기 때문에 특정 벤더에 종속적이지 않다. 즉 설정 파일에서 JPA에게 어떤 DB를 사용하고 있는지 알려주기만 하면 얼마든지 DB를 바꿀 수가 있다.

4 SQL Mapper는 단순히 쿼리 실행 결과를 Java 클래스에 매핑하는데, ORM은 테이블 사이의 관계(1:n, n:n)도 Java 클래스로 표현한다.

객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중 할 수 있으며, 객체지향 개발이 가능하다.