> For the complete documentation index, see [llms.txt](https://byulseop-til.gitbook.io/sinheeseop_til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://byulseop-til.gitbook.io/sinheeseop_til/database/db/sqlmapper_and_orm.md).

# SQL Mapper and ORM

### SQL Mapper 란?

* 객체로 SQL 쿼리를 할 수 있으며, 객체의 값을 쿼리문에 바인딩 가능하다. (예: 객체의 id 값을, 쿼리 where 절에 바인딩)
* 쿼리의 결과 값을 객체에 맵핑 할 수 있다.

### ORM (Object Relational Mapping)

* 말 그대로, 객체를 관계형 데이터베이스의 테이블과 직접 맵핑함.
  * 다시 말해 객체를 테이블로 만들고, 객체의 값 변경 시 테이블의 값도 같이 변경 됨.
* 쿼리를 동적으로 생성함. (우리는 객체에 상태에 따라 쿼리를 다르게 만들어야 하기 때문)

### 둘의 차이점

* SQL Mapper는 개발자가 직접 쿼리문 작성해야함.
  * 당연히 DB가 바뀌어도 직접 다 바꿔야함.
  * 직접 치다보니 복잡한 쿼리문은 더 편하다고 하지만 ORM 기술 중 JPA 도 해당 기능 제공함
* ORM 은 SQL 안쳐도 됨. (아예 안치는건 아님, 복잡한건 쳐야된다고 들음)
  * 당연히 DB가 바뀌어도 해당 DB 에 맞게 쿼리문 작성함.

### ORM 대표기술

* JPA, 하이버네이트, 이클립스 링크 등이 있음
* JPA 는 자바 진영의 ORM 표준 인터페이스임
  * JPA 구현체 중에서 하이버네이트와 이클립스링크 등이 있음

![사진1](https://github.com/SINHEESEOP/TIL/blob/main/Images/SQLMapper_ORM_1.png)

\#중요

```
결국 뭐가 됐던 내부에선 JDBC 를 다 사용함.
그렇기 때문에 백엔드 개발자라면 무조건 JDBC를 잘 알아야함.
```
