개발자가 작성한 SQL쿼리를 Java객체와 집접 매핑하는 방식입니다.
XML 파일이나 어노테이션을 통해 SQL문을 명시적으로 작성해야 합니다.
개발자가 SQL을 완전히 제어할 수 있어 복잡한 쿼리나 성능 최적화에 필요한 상황에 유리합니다.
장점
레거시 DB의 특징
Create table TBL_USR_INFO(
USR_ID VARCHAR(20), -- 표준: user_id
USR_NM VARCHAR(100), -- 표준: user_name
REG_DT VARCHAR(8), -- 날짜를 문자열로 저장
DEL_YN CHAR(1) -- Y/N으로 삭제 여부 관리
)
정규화되지 않은 구조
CREATE TABLE TBL_USR_INFO(
CUST_ID VARCHAR(10),
CUST_NAME VARCHAR(50),
ORDER_ID VARCHAR(10),
ORDER_DATE VARCHAR(8),
PRODUCT_INFO VARCHAR(500) -- 상품 정보가 문자열로 저장
)
단점
-- MySQL & PostgreSQL: LIMIT/OFFSET 사용
SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 20;
-- Oracle: ROWNUM 사용 (복잡함)
SELECT * FROM (
SELECT ROWNUM rnum, u.* FROM (
SELECT * FROM users ORDER BY id
) u WHERE ROWNUM <= 30
) WHERE rnum > 20;
-- SQL Server: OFFSET/FETCH 사용
SELECT * FROM users ORDER BY id
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;