--- name: mybatis-mapper description: "MyBatis Mapper XML 쿼리를 작성하거나 수정한다. 쿼리 최적화, 동적 SQL, 페이징, 다중 DB 호환 쿼리 작업 시 사용한다. 'SQL 작성', '쿼리 추가', 'Mapper 수정', '조회 조건 추가' 요청에 적용." --- # MyBatis Mapper XML 작성 스킬 ## Mapper 파일 위치 ``` src/main/resources/egovframework/mapper/kccf/{module}/{Module}_SQL.xml ``` ## namespace 규칙 ```xml ``` ## 핵심 패턴 ### 페이징 목록 조회 (Oracle/Altibase 기준) ```xml ``` **MySQL/MariaDB 페이징 변형:** ```sql SELECT A.*, @rownum := @rownum + 1 AS rn, total.cnt AS totCnt FROM TB_{MODULE} A, (SELECT COUNT(*) cnt FROM TB_{MODULE} WHERE DELETE_AT='N') total WHERE A.DELETE_AT = 'N' ORDER BY A.REG_DTTM DESC LIMIT #{pageSize} OFFSET #{offset} ``` ### 동적 조건 (where 절) ```xml AND COL = #{field} AND CODE IN #{item} AND REG_DTTM >= #{searchStartDate} AND REG_DTTM <= #{searchEndDate} ``` ### INSERT / UPDATE ```xml INSERT INTO TB_{MODULE} ( ID, NM, CODE, DELETE_AT, REG_USER_ID, REG_DTTM, UPD_USER_ID, UPD_DTTM ) VALUES ( #{id}, #{nm}, #{code}, 'N', #{regUserId}, SYSDATE, #{updUserId}, SYSDATE ) UPDATE TB_{MODULE} NM = #{nm}, CODE = #{code}, UPD_USER_ID = #{updUserId}, UPD_DTTM = SYSDATE WHERE ID = #{id} ``` ### 소프트 삭제 (KCCF 표준) ```xml UPDATE TB_{MODULE} SET DELETE_AT = 'Y' , UPD_USER_ID = #{updUserId} , UPD_DTTM = SYSDATE WHERE ID = #{id} ``` ### ID 채번 (시퀀스) ```xml ``` ## XML 특수문자 이스케이프 | 문자 | XML 표현 | |------|---------| | `<` | `<` | | `>` | `>` | | `&` | `&` | | `<=` | `<=` | | `>=` | `>=` | 또는 CDATA 블록: ```xml ``` ## DB 방언 주의사항 | 기능 | Oracle/Altibase | MySQL/MariaDB | PostgreSQL | |------|----------------|---------------|-----------| | 현재시각 | `SYSDATE` | `NOW()` | `NOW()` | | 문자 연결 | `\|\|` | `CONCAT()` | `\|\|` | | NULL 대체 | `NVL()` | `IFNULL()` | `COALESCE()` | | 행번호 | `ROWNUM` / `ROW_NUMBER()` | `ROW_NUMBER()` (8.0+) | `ROW_NUMBER()` | | 페이징 | `ROWNUM` 서브쿼리 | `LIMIT OFFSET` | `LIMIT OFFSET` | | 더미테이블 | `FROM DUAL` | 생략 | 생략 |