예제
Java
public class Person{
private String name;
private String height;
private String weight;
private String ssn;
//implement getter & setter methods
}
iBatis
<select id="getPerson" resultClass="net.agilejava.person.domain.Person">
SELECT name, height, weight, ssn FROM USER WHERE name = #name#;
</select>
해당 쿼리의 결과를 받을 객체를 지정해줄 수 있다. 즉, getPerson이라고 정의된 쿼리 결과는 net.agilejava.person.domain의 Person 객체에 자동으로 매핑되는 것이다.
Hibernate
<hibernate-mapping>
<class name="net.agilejava.person.domain.Person" table="person">
<id name="name" column="name"/>
<property name="height" column="height"/>
<property name="weight" column="weight"/>
<property name="ssn" column="ssn"/>
<class>
</hibernate-mapping>
위 두개의 Framework의 예시를 보면 알 수 있듯이, setter 메소드가 있으면 객체에 결과를 set하는 작업을 따로 해주지 않아도 자동으로 해당 값이 할당된다. 물론 여기에 1:m 이나 m:1등의 관계들이 형성되면 추가적인 작업이 필요하긴 하지만, 일단 눈에 보이는 간단한 부분은 처리가 되는 것을 볼 수 있다. 물론 반대의 경우에도 객체를 던져주면 ORM Framework에서 알아서 get을 수행해 해당하는 column에 넣어주게 된다.
JPA(Java Persistence API)는 자바의 ORM 기술 표준으로 인터페이스의 모음이다. 이러한 JPA 표준 명세를 구현한 구현체가 바로 Hibernate이다.
JPA는 반복적인 CRUD SQL을 처리해준다. JPA는 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데, 개발자는 어떤 SQL이 실행될지 생각만하면 되고, 예측도 쉽게 할 수 있다. 추가적으로 JPA는 네이티브 SQL이란 기능을 제공해주는데 관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우 SQL을 직접 작성하여 사용할 수 있다.
JPA를 사용하여 얻을 수 있는 가장 큰 것은 SQL아닌 객체 중심으로 개발할 수 있다는 것이다. 이에 따라 당연히 생산성이 좋아지고 유지보수도 수월하다. 또한 JPA는 패러다임의 불일치도해결하였다. 예를 들면 JAVA에서는 부모클래스와 자식클래스의 관계 즉, 상속관계가 존재하는데 데이터베이스에서는 이러한 객체의 상속관계를 지원하지 않는다(상속 기능을 지원하는 DB도 있지만 객체 상속과는 다름). 이런 상속관계를 JPA는 아래와 같은 방식으로 해결하였다.

위의 구조에서 만약 Album 클래스를 저장한다고 가정해보자.
// Album 객체저장
jpa.persist(album);
그러면 JPA는 위의 코드를 아래의 쿼리로 변환해서 실행한다.
INSERT INTO ITEM (ID, NAME, PRICE) .....
INSERT INTO ALBUM (ARTIST) .....
위처럼 저장하면 당연히 조회할때도 두 테이블을 엮어서 가져올 것이다. 조회하는 JAVA코드와 변환되는 쿼리를 보도록하자.
// JAVA 코드
String albumId = "id100";
Album album = jpa.find(Album.class, albumId);
// 변환된 쿼리
SELECT I.*, A.*
FROM ITEM I
JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID
1) 복잡한 비동기 코드를 깔끔하고 쉽게 만들 수 있도록 한다.
2) Chaining을 통해 값을 전달하거나 연속된 일련의 작업을 처리 할 수 있다.
3) Error handling에 대한 처리를 깔끔하게 할 수 있다.
Python 기반 프레임워크인 Django에서 자체적으로 지원하는 ORM이다.
Prisma의 특징은 GraphQL스키마를 기반으로 DB를 자동생성 해준다는 것이다. (*GraphQL? facebook에서 만든 Graph Query Language로 애플리케이션 Query 언어로써 기존의 REST API의 한계점을 극복하고자 나온 통신 규약으로 REST API를 대체할 수 있다.) GraphQL의 장점은 아래와 같다.
1) 요청메세지가 값이 없는 JSON과 비슷하며 받는 데이터는 JSON형태 이다.
2) 단일요청으로 원하는 데이터를 한번에 가져올 수 있다.
3) type system을 지원한다.
4) GraphiQL 등의 강력한 도구를 사용 할 수 있다.
5) 확장성이 좋다.
참고 : https://eun-jeong.tistory.com/31
https://dbjh.tistory.com/77