[mybatis] xml 속성 정리
<?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">
<!-- 게시물 작성 -->
<insert id="insertBoard" parameterType="boardA">
insert into board(bNum,bWriter,bTitle,bContent,bRef,bStep,bRefOrder,bParentNum)
values(board_seq.nextval,#{bWriter.memNum},#{bTitle},#{bContent},#{bRef},#{bStep},#{bRefOrder},#{bParentNum})
</insert>
<!-- 글 갯수 -->
<select id="countBoard" resultType="int">
select count(*) from board
</select>
<!-- 답글 끼워넣기 위치 확보 -->
<update id="updateRefCount" parameterType="boardA">
update board set bRefOrder=bRefOrder+1
where bRef=#{bRef} and bRefOrder>#{bRefOrder}
</update>
<!-- 게시물 리스트 출력 -->
<select id="selectListBoard" resultMap="selectListMap" parameterType="map">
select
b.bNum as b_num,
b.bTitle as b_title,
b.bView as b_view,
b.bRef as b_ref,
b.bStep as b_step,
b.bRefOrder as b_refOrder,
b.bAnswerCnt as b_answerCnt,
b.bParentNum as b_parentNum,
b.bDeleteflag as b_deleteflag,
m.memNum as m_memNum,
m.memName as m_memName
from board b left outer join member m on b.bWriter=m.memNum
order by b.ref desc,b.bRefOrder asc
limit #{start},#{cnt}
</select>
<!-- 게시물 상세보기 출력 -->
<select id="selectBoard" resultMap="selectMap">
select
b.bNum as b_num,
b.bTitle as b_title,
b.bContent as b_content,
b.bView as b_view,
b.bRef as b_ref,
b.bStep as b_step,
b.bRefOrder as b_refOrder,
b.bAnswerCnt as b_answerCnt,
b.bParentNum as b_parentNum,
b.bDeleteflag as b_deleteflag,
m.memNum as m_memNum,
m.memName as m_memName
from board b left outer join member m on b.bWriter=m.memNum;
</select>
<!-- 조회수 증가 -->
<update id="updateView" parameterType="Integer">
update board set bView=bView+1
where bNum=#{bNum}
</update>
<!-- DB 글 수정 -->
<update id="updateBoard" parameterType="boardA">
update board set bTitle=#{bTitle},bContent=#{bContent}
where bNum=#{bNum} and bWriter=#{bWriter.memNum}
</update>
<!-- 글삭제 -->
<update id="deleteDao" parameterType="boardA">
update board set bDeleteflag='삭제'
where bNum=#{bNum} and bWriter=#{bWriter.memNum}
</update>
<!-- 답글 수 업데이트 -->
<update id="updateAnswerCnt" parameterType="boardA">
update board set bAnswerCnt=bAnswerCnt+1
where bRef=#{bRef} and bStep<![CDATA[ <= ]]>${bStep}
</update>
<!-- 게시물 리스트 resultMap -->
<resultMap id="selectListMap" type="boardA">
<id property="bNum" column="b_num"/>
<result property="bTitle" column="b_title"/>
<result property="bView" column="b_view"/>
<result property="bRef" column="b_ref"/>
<result property="bStep" column="b_step"/>
<result property="bRefOrder" column="b_refOrder"/>
<result property="bAnswerCnt" column="b_answerCnt"/>
<result property="bParentNum" column="b_parentNum"/>
<result property="bDeleteflag" column="b_deleteflag"/>
<association property="bWriter" resultMap="memberResult"/>
</resultMap>
<!-- 게시물 상세보기 resultMap -->
<resultMap id="selectMap" type="boardA">
<id property="bNum" column="b_num"/>
<result property="bTitle" column="b_title"/>
<result property="bContent" column="b_content"/>
<result property="bView" column="b_view"/>
<result property="bRef" column="b_ref"/>
<result property="bStep" column="b_step"/>
<result property="bRefOrder" column="b_refOrder"/>
<result property="bAnswerCnt" column="b_answerCnt"/>
<result property="bParentNum" column="b_parentNum"/>
<result property="bDeleteflag" column="b_deleteflag"/>
<association property="bWriter" resultMap="memberResult"/>
</resultMap>
<!-- board resultMap의 공통 member select -->
<resultMap type="memberA" id="memberResult">
<id property="memNum" column="m_memNum"/>
<result property="memName" column="m_memName"/>
</resultMap>
</mapper>
<mapper>
- namespace = 자바의 패키지처럼 여러개의 SQL문을 묶는 용도로 사용한다.
<insert>,<select>,<update>,<delete>
- id = 구문을 찾기 위해 사용될 수 있는 네임스페이스 내 유일한 구분자
- parameterType = 쿼리문에 들어가는 매개타입
- resultType = 가져오는 결과 타입
<resultMap>
컬럼과 멤버변수를 매핑할 정보를 작성한다.
- type = 가져오는 결과 타입
- id = 구문을 찾기 위해 사용될 수 있는 유일한 구분자
<id> : primary key 에 해당하는 컬럼을 설정 ( 데이터들을 구분할 수 있는 값 )
- column : 테이블의 컬럼명
- property : 조회 결과가 매핑될 DTO 의 멤버변수
resultMap 속성인 id 가 아니다.
<result> : primary key 가 아닌 일반 컬럼에 대한 매핑을 처리하며 속성은 <id> 와 동일하다.
<select> 에서<resultMap> 를 사용할 때
returnType 대신 resultMap 속성에 resultMap의 id 를 넣어준다.
<association>
1:1 관계의 테이블을 조인할 때 사용 (조인 객체)
ex) 1개 Board 에는 1명의 Member 만 존재
- property : 조인객체명
- javaType : 조인객체의 자료형
- select : 사용할 <select> 의 id 값을 넣어 매핑
- column : 사용할 <select> 에 넣은 매개값
또는..
- resultMap : 다른 resultMap 을 재사용할 때 그 resultMap 의 id (다른 mapper 일 경우 namespace 포함)
<collection>
1:M 관계의 테이블을 조인할 때 사용 (조인 객체)
ex) 1개의 Board 에는 M개의 Member 가 존재
- property : 조인객체명
- javaType : collection의 자료형(ex List)
- ofType : collection의 자료형안의 지네릭(ex List<T>)
- select : 사용할 <select> 의 id 값을 넣어 매핑
- column : 사용할 <select> 에 넣은 매개값
또는..
- resultMap : 다른 resultMap 을 재사용할 때 그 resultMap 의 id (다른 mapper 일 경우 namespace 포함)