본문 바로가기

개발 실습/CRUD 게시판 만들기

18. 게시판 백엔드 기초 : board-mapper.xml로 매핑 구조 이해하기

반응형
목차

1. board-mapper.xml 이란?
 
2. 파일 생성하기

3. 코드 살펴보기
    3-1. Mapper 파일 구조
    3-2. namespace와 id
    3-3. resultType와 SQL 매핑
    3-4. 게시글 전체 조회 쿼리

4. 마무리하며

 

 

1. board-mapper.xml 이란?

MyBatis에서는 자바 코드 안에 직접 SQL을 작성하지 않고 XML 파일로 쿼리를 별도로 관리할 수 있습니다.

이 XML 파일을 바로 Mapper(매퍼)라고 합니다.

 

매퍼는 DAO와 DB 사이에서 다음과 같은 역할을 합니다.

  • SQL 쿼리 작성 및 관리
  • 쿼리 결과를 VO 객체에 매핑
  • DAO에서 호출할 수 있는 쿼리 ID 제공

즉, 매퍼는 DAO가 DB와 통신할 때 어떤 쿼리를 실행하고 어떤 객체에 담을지를 알려주는 중간 연결자 역할을 합니다.

 

2. 파일 생성하기

파일 생성하는 법은 이전 글에서 다뤘으니, 이번에는 간단하게 경로와 이름만 정리하고 넘어가겠습니다.


📌 참고
의 링크 확인 바랍니다.

 

3. 코드 살펴보기

아래는 게시글 전체 조회 기능을 담당하는 selectAll 쿼리입니다.

게시글 목록 화면에 데이터를 뿌리기 위해 작성했습니다.

 

이제 이 코드를 하나씩 살펴보겠습니다.

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="board">

  <!-- 게시글 전체 조회 -->
  <select id="selectAll" resultType="com.visit.board.vo.BoardVo">
    SELECT
      POST_ID AS postId,
      USER_NM AS userNm,
      USER_PW AS userPw,
      DATE_FORMAT(REG_DT, '%Y-%m-%d') AS regDt,
      DATE_FORMAT(MOD_DT, '%Y-%m-%d') AS modDt,
      TITLE,
      CONTENT
    FROM BOARD_POST_TB
    ORDER BY POST_ID DESC
  </select>

</mapper>

 

 

    3-1. Mapper 파일 구조

<mapper> 태그는 매퍼 파일의 루트(root) 태그입니다.

이 안에는 SQL 문을 정의하는 <select>, <insert>, <update>, <delete> 등이 포함됩니다.

 

    3-2. namespace와 id

<namespace> 속성은 DAO에서 매퍼를 호출할 때 사용할 이름을 지정하기 위해 사용합니다.

매퍼 파일의 고유 이름으로, DAO에서 board.selectAll와 같은 형식으로 호출합니다.

 

<id> 속성은 각 SQL문을 구분하는 고유 식별자입니다. 

하나의 Mapper 파일 안에는 여러 쿼리가 존재하기에 id를 주어서 각 쿼리를 구분할 수 있습니다.

 

DAO에서 특정 기능을 호출할 때는 namespace.id 형태를 사용하며 이를 통해 어떤 매퍼의 어떤 SQL을 실행할지를 명확하게 지정할 수 있습니다.

 

    3-3. resultType와 SQL 매핑

resultType은 SQL 결과를 어떤 VO 객체에 담을지를 결정합니다.

이번 예제에서는 com.visit.voard.vo.BoardVo 로 설정되어 있기에 조회된 각 행이 자동으로 BoardVo 객체에 매핑됩니다.

 

예를 들면 다음과 같습니다.

  • POST_ID : postId
  • USER_NM : userNm
  • REG_DT : regDt

이런 식으로 DB 컬럼명이 VO 필드명과 매핑되며 JAVA 코드에서 조회된 데이터를 바로 활용할 수 있게 됩니다.

 

    3-4. 게시글 전체 조회 쿼리

이제 쿼리를 자세히 살펴보겠습니다.

 

SELECT
  POST_ID AS postId,
  USER_NM AS userNm,
  USER_PW AS userPw,
  DATE_FORMAT(REG_DT, '%Y-%m-%d') AS regDt,
  DATE_FORMAT(MOD_DT, '%Y-%m-%d') AS modDt,
  TITLE,
  CONTENT
FROM BOARD_POST_TB
ORDER BY POST_ID DESC;

 

AS 키워드를 사용해 DB 컬럼명과 VO 필드명을 맞춰주고

DATE_FORMAT을 이용해 REG_DT와 MOD_DT의 날짜 형식을 통일했습니다.

또한, ORDER BY POST_ID DESC 를 통해 최신 글이 가장 위에 나오도록 정렬했습니다.

 

4. 마무리하며

이번 글에서는 board-mapper.xml 의 역할과 구조를 살펴보았습니다.

 

다음 단계에서는 DAO 파일을 통해 이 매퍼를 실제 자바 코드에서 호출하고 데이터를 가져오는 과정을 다뤄보겠습니다.

 

여기까지 수고하셨습니다.

감사합니다.

 


📌  참고

 

파일 생성하는 법

https://silverji.tistory.com/257

 

[JAVA]8. 게시판 목록 화면 틀 잡기

드디어 본격적으로 게시판 만들기를 들어가겠습니다.방명록 느낌으로 간단한 CRUD 화면을 작업할 예정인데요.Spring 연동 없이 오리지널 Servlet 으로 작업할겁니다.Servlet 의 구조를 파악하면서 기

silverji.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형