-
[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 포함)
'JAVA' 카테고리의 다른 글
[spring] spring-boot : MVC 어노테이션(Mapper,Repository,Service,Controller) (0) 2021.08.16 [spring] spring-boot:Spring Starter Project 시작하기 (0) 2021.08.16 [mybatis] xml v.s annotation (0) 2021.08.15 [spring] 어노테이션 정리 (0) 2021.08.13 [spring] 의존성 주입(DI) (0) 2021.08.13