ORM vs SQL Mapper

김윤서·2024년 8월 22일
0
특징ORM (Object-Relational Mapping)SQL Mapper
쿼리 작성자동 생성 (ORM이 객체 모델에 따라 생성)직접 작성 (개발자가 SQL 작성)
매핑 방식객체와 테이블 간의 매핑을 자동으로 처리SQL 결과를 객체에 자동으로 매핑
트랜잭션 관리자동으로 관리 (ORM이 처리)직접 관리하거나 프레임워크에 의존
데이터베이스 독립성상대적으로 독립적 (설정 변경으로 다른 DB 지원)종속적 (SQL에 따라 변경 필요)
유연성제한적 (자동 생성된 쿼리 사용)높음 (직접 작성한 SQL 사용)
비즈니스 로직 중심비즈니스 로직에 집중 가능SQL 쿼리에 집중
복잡한 쿼리 처리ORM의 쿼리 언어 사용 (JPQL, HQL 등)복잡한 쿼리를 직접 작성하여 처리 가능

JPA

Subject 키워드

메서드 처음 시작 위치에 오는 키워드로 어떤 작업을 할 것이며, 어떤 데이터 타입을 리턴할지 결정됩니다.

  • findBy : 조회하는 대상이 1개 데이터라면 단일 객체로 리턴
  • findAllBy : List와 같이 Collection 타입으로 리턴
  • existBy : boolean 타입으로 리턴
  • countBy : int/long 등으로 해당되는 데이터 수 리턴
  • deleteBy : void 타입 혹은 int/long 등으로 삭제된 데이터 수 리턴

메서드명 내 키워드

By 뒤에 작성되는 키워드로 SQL의 Where 명령어와 같은 역할을 합니다.

키워드샘플JPQL
AndfindByLastnameAndFirstname… where x.lastname = ?1 and x.firstname = ?2
OrfindByLastnameOrFirstname… where x.lastname = ?1 or x.firstname = ?2
Is, EqualsfindByFirstname,findByFirstnameIs,findByFirstnameEquals… where x.firstname = ?1
BetweenfindByStartDateBetween… where x.startDate between ?1 and ?2
LessThanfindByAgeLessThan… where x.age < ?1
LikefindByFirstnameLike… where x.firstname like ?1
NotLikefindByFirstnameNotLike… where x.firstname not like ?1
OrderByfindAllByAgeOrderByLastnameDesc… where x.age = ?1 order by x.lastname desc
NotfindByLastnameNot… where x.lastname <> ?1
InfindByAgeIn(Collection ages)… where x.age in ?1
TRUEfindByActiveTrue()… where x.active = true
FALSEfindByActiveFalse()… where x.active = false

0개의 댓글