공공부하자개발 · 영어 학습 노트
자바
실무 확장Excel · 파일 업로드 · DB 연동0/22 완료
  • 01Excel(XLSX) 구조와 순수 JDK로 읽기/쓰기
  • 02Apache POI로 Excel 업로드/다운로드
  • 03파일 업로드/다운로드 서버 (HttpServer)
  • 04JDBC 기초와 트랜잭션 (H2)
  • 05MyBatis 어노테이션 매퍼로 쿼리 연동
  • 06MyBatis XML 매퍼 · Oracle 방언 · PageHelper · Spring Boot
  • 07REST API 서버와 JSON
  • 08Vue 3 SPA 와 Java 서버 연동
  • 09@Scheduled 운영
  • 10로깅 실무: 레벨·계층, MDC 추적, 예외·성능, 마스킹, 롤링, JSON 로그
  • 11외부 API 연동
  • 12테스트 실무
  • 13암호화·개인정보 보호
  • 14인코딩·한글 실무
  • 15@Transactional 심화
  • 16긴 작업 비동기 처리와 진행률
  • 17SFTP·FTP 파일 연계
  • 18로컬 캐시와 @Cacheable
  • 19메일·알림 발송
  • 20웹 보안 체크리스트
  • 21빌드 도구와 폐쇄망 의존성 반입
  • 22성능 측정: p50·p95·p99, 측정 계층, JFR, JMH 함정, 자체 부하 테스트, 병목 순위
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 실무 확장 › 06 / 22

MyBatis XML 매퍼 · Oracle 방언 · PageHelper · Spring Boot

섹션 7진행 0 / 22
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

MyBatis XML 매퍼 · Oracle 방언 · PageHelper · Spring Boot

실무 프로젝트가 실제로 쓰는 형태의 MyBatis 를 다룹니다. SQL 을 XML 매퍼 파일에 두고 <resultMap>, <where>/<if>/<foreach>/<choose>/<bind>, <sql>/<include>, <collection> 으로 조립하는 법, 시퀀스·ROWNUM·MERGE 같은 Oracle 문법을 databaseId 로 DB 별 분기하는 법, PageHelper 가 내부에서 하는 일을 30줄 인터셉터로 직접 구현해 보는 것, 그리고 Spring Boot 가 이 모든 설정을 어떻게 대신하는지까지. 실행 예제는 H2 의 Oracle 호환 모드에서 Oracle SQL 을 그대로 돌립니다.

1. 왜 배우는가

이전 레슨(05)에서 어노테이션 매퍼로 MyBatis 의 실체를 배웠습니다. 그런데 실제 업무 프로젝트를 열어 보면 풍경이 다릅니다. 이 학습 사이트를 만든 개발 환경의 실무 프로젝트 하나를 조사한 결과가 이렇습니다.

text
Spring Boot 3.5 + Java 21 + Maven
MyBatis (mybatis-spring-boot-starter) — 어노테이션 매퍼 0개, XML 매퍼 84개
resources/mapper/{oracle | maria | tibero}/{모듈}/*.xml   ← DB 방언별 XML 폴더
PageHelper (pagehelper-spring-boot-starter) 로 목록 페이징
Oracle ojdbc11 주력, Tibero, MariaDB 드라이버 동봉
Spring Batch 없이 @Scheduled 자체 스케줄러

국내 SI·금융·공공 프로젝트의 표준 조합입니다. 어노테이션이 아닌 XML 을 쓰는 이유는 셋입니다. 첫째, SQL 이 수십 줄입니다. 조인 5개, 서브쿼리, CASE, 분석 함수가 들어간 리포트 SQL 을 자바 문자열에 넣으면 읽을 수 없습니다. 둘째, DBA 와 협업합니다.

DBA 는 자바를 모르지만 XML 안의 SQL 은 검토하고 튜닝할 수 있습니다. 셋째, DB 방언별 분기입니다. 같은 서비스가 Oracle 고객사와 MariaDB 고객사에 납품되면 SQL 파일만 폴더째 바꿔 끼웁니다.

이 레슨은 그 실무 형태를 폐쇄망 학습 PC 에서 그대로 재현합니다. Oracle 이 없으니 H2 의 Oracle 호환 모드(MODE=Oracle)를 씁니다.

NUMBER, VARCHAR2, 시퀀스, DUAL, ROWNUM, NVL, TO_CHAR, MERGE USING 이 그대로 동작하므로 실무 XML 의 SQL 을 거의 손대지 않고 실행할 수 있습니다.

PageHelper 와 Spring 은 jar 가 없으므로, PageHelper 는 원리를 직접 구현하고 Spring 은 설정 대응표로 다룹니다. 원리를 알면 라이브러리의 설정 한 줄이 무엇을 대신하는지 보이고, PageHelper 의 유명한 함정(다음 조회에 잘못 적용되는 페이징)이 왜 생기는지 이해할 수 있습니다.

코드는 java-src/extension/06_mybatis_xml 에 있습니다. 자바 파일 8개와 XML 3개, properties 1개입니다.

왜 배우는가
    이전 레슨05 MyBatis 어노테이션 매퍼로 쿼리 연동1 / 7다음 섹션2 핵심 원리