ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [mybatis] xml 속성 정리
    JAVA 2021. 8. 15. 19:44
    <?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 포함)

     

    참고 : https://goodteacher.tistory.com/248

    댓글

Designed by Tistory.