Notice
Recent Posts
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

IT'S YU

[MyBatis] Mapper XML 파일 설정 본문

DB/MyBatis

[MyBatis] Mapper XML 파일 설정

자석 2022. 2. 22. 16:47

지난 시간과 크게 다른 부분이 없기에 추가된 부분만 기록했다.

 

1. resultMap 속성 사용

- 검색결과를 특정 자바 객체에 매핑하여 리턴하기 위해서 paramType 속성을 사용한다. 그러나 검색 결과를 parameterType 속성으로 매핑할 수 없는 몇몇 사례가 있다.

> 검색 쿼리가 단순 테이블 조회가 아닌 JOIN 구문을 포함할 때는 검색 결과를 정확하게 하나의 자바 객체로 매핑 할 수 없다.

> 또는 검색된 테이블의 칼럼 이름과 매핑에 사용될 자바 객체의 변수 이름이 다를 때에 검색 결과가 정확하게 자바 객체로 매핑되지 않을 때이다.

 

2. CDATA Section 사용

- sql 구문 내에 '<' 기호를 사용하면 에러가 발생한다. 등호의 의미가 아닌 또 다른 태그로 인식하기 때문이다.

- Mybatis와는 상관없는 XML 고유의 문법으로서, CDATA 영역에 작성된 데이터는 단순한 문자 데이터(Character DATA)이므로 XML 파서가 해석하지 않도록 한다.

1
2
3
4
5
<section id="getBoard" resultType="board">
    select *
    from board
    where seq <= #{seq}
</select>
cs

 

3. sql 대문자 설정하기

- Mapper 파일에 등록되는 sql 구문은 일반적으로 대문자로 작성한다.

- sql 구문은 대소문자를 구분하지는 않지만, 식별성을 높이기 위해 사용한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!-- board-mapping.xml -->
 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
<mapper namespace="BoardDAO">
 
    <resultMap id="boardResult" type="board">
        <id property="seq" column="SEQ" />
        <result property="title" column="TITLE" />
        <result property="writer" column="WRITER" />
        <result property="content" column="CONTENT" />
        <result property="regDate" column="REGDATE" />
        <result property="cnt" column="CNT" />
    </resultMap>
 
    <insert id="insertBoard" parameterType="board">
        <![CDATA[
            INSERT INTO BOARD(SEQ, TITLE, WRITER, CONTENT) 
            VALUES((SELECT NVL(MAX(SEQ), 0)+1 FROM BOARD),#{title},#{writer},#{content})
        ]]>
    </insert>
    
    <update id="updateBoard">
        <![CDATA[
            UPDATE BOARD SET TITLE=#{title}, content=#{content} WHERE SEQ=#{seq}
        ]]>
    </update>
    
    <delete id="deleteBoard">
        <![CDATA[
            DELETE BOARD WHERE SEQ=#{seq}
        ]]>
    </delete>
    
    <select id="getBoard" resultType="board">
        <![CDATA[
            SELECT * FROM BOARD WHERE SEQ=#{seq}
        ]]>
    </select>
    
    <select id="getBoardList" resultMap="boardResult">
        <![CDATA[
            SELECT * FROM BOARD
            WHERE TITLE LIKE '%'||#{searchKeyword}||'%'
            ORDER BY SEQ DESC
        ]]>
    </select>
</mapper>
 
cs

 

 

4. SqlSessionFactory 클래스

- Mybatis를 사용하여 DB연동을 간단하게 처리하려면 최종적으로 Mybatis가 제공하는 SqlSession 객체를 사용해야 한다. 지금은 직접 작성했지만 추후에 Mybatis를 스프링과 연동할 때 프레임워크에서 제공하는 클래스를 사용할 것이다.

 

 

출처 : https://yetdefined.tistory.com/54