ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•
repository

DAO๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒจํ‚ค์ง€์ด๋‹ค.

DAOํด๋ž˜์Šค๋Š” DB์— ์ ‘์†ํ•ด์„œ ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€, ์‚ญ์ œ, ์ˆ˜์ • ๋“ฑ์˜ ์ž‘์—…์„ ํ•œ๋‹ค.

๋จผ์ € ๊ฒŒ์‹œํŒ ๊ธฐ๋Šฅ์˜ ์ƒ์„ธํ™”๋ฅผ ์œ„ํ•œ DAO์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

IBoardDAO.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.spring.myapp.board.repository;
 
import com.spring.myapp.board.model.BoardVO;
 
public interface IBoardDAO {
    //๊ธฐ๋Šฅ์„ ์ƒ์„ธํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„
    //๊ฒŒ์‹œํŒ ๊ธฐ๋Šฅ์„ ์ƒ์„ธํ•œ๋‹ค.
    
    
    //1. ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ๊ธฐ๋Šฅ ๋ฉ”์„œ๋“œ - ๊ฒŒ์‹œ๊ธ€์„ ํ•˜๋‚˜ ๊ฐ€์ ธ์™€์„œ ๋“ฑ๋กํ•œ๋‹ค.
    void insert(BoardVO article) throws Exception;
    
    
}
 

์ถ”์ƒ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ฒดํ™” ์‹œํ‚ค๋Š” ๊ตฌํ˜„ ํด๋ž˜์Šค๋„ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

 

 

BoardMapper.xml

์„ค์ •ํŒŒ์ผ์—์„œ *Mapper.xml๋กœ ํ•˜๋„๋ก ์„ค์ •ํ•ด๋’€์œผ๋‹ˆ๊นŒ ์ด๋ฆ„ ์ƒ์„ฑํ•  ๋•Œ ์ฃผ์˜๋ฅผ ํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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">
    
<!-- 
    ๋งคํผ์˜ namespace ์†์„ฑ์„ ์‚ฌ์šฉํ•ด ๋งคํผ์˜ ์ด๋ฆ„์„ ์ •ํ•ด์ค€๋‹ค.
    ๊ธฐ์กด์˜ ๋ฐฉ์‹์—์„œ๋Š” repository์˜ DAO์˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฒฝ๋กœ๋ฅผ ์ผ๋Š”๋ฐ
    ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ง˜๋Œ€๋กœ ์ ์–ด๋‘๊ณ  ์„ค์ •์„ ํ•˜๊ณ  DAO์— ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ์–ด๋…ธํ…Œ์ด์…˜(@Repository)์„ ๋‹ฌ์•„์ค€๋‹ค.
-->
<mapper namespace="BoardMapper">
 
 
</mapper>
 

 

 

BoardDAO.java

๋‹ค์Œ mappaer๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ ์œ„ํ•ด sqlSqlSession ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด ๊ฐ์ฒด๋Š” DAO์— ์„ ์–ธํ•ด์ค€๋‹ค.

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
package com.spring.myapp.board.repository;
 
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 
import com.spring.myapp.board.model.BoardVO;
 
//์ž๋™ ๋นˆ ๋“ฑ๋ก ์–ด๋…ธํ…Œ์ด์…˜ : @Component, @Controller, @Service, @Repository
@Repository
public class BoardDAO implements IBoardDAO {
    
    //Mapper์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด ์„ ์–ธ - ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ ค๊ณ  final์„ ๋ถ™์ž„
    private final SqlSession sqlSession;
    //๊ฐ’์„ ์ฒ˜์Œ์— ์ฃผ์–ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๋นจ๊ฐ„์ค„์ด ๋œจ๋‹ˆ๊นŒ ๊ฐ’์„ ์„ค์ •ํ•ด์ค€๋‹ค.
    private static final String NAMESPACE = "BoardMapper";
    
    //์˜์กด์„ฑ ์ž๋™์ฃผ์ž… ์•„๋…ธํ…Œ์ด์…˜: @Autowired, @Inject, @Resources
    //SqlSession ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ์ฃผ์ž…์‹œ์ผœ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
    @Autowired 
    public BoardDAO(SqlSession sqlSession) {
        //๊ฐ’์„ ์ €์žฅํ•ด์ฃผ๋ฉด ๋นจ๊ฐ„์ค„ ์‚ฌ๋ผ์ ธ์š”
        this.sqlSession = sqlSession;
    }
    
 
    //1. ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ๊ธฐ๋Šฅ ๋ฉ”์„œ๋“œ - ๊ฒŒ์‹œ๊ธ€์„ ํ•˜๋‚˜ ๊ฐ€์ ธ์™€์„œ ๋“ฑ๋กํ•œ๋‹ค.
    @Override
    public void insert(BoardVO article) throws Exception {
        
    }
 
}
 

 

 

BoardMapper.xml์— ๋‹ค์Œ ์ฝ”๋“œ ์ถ”๊ฐ€
    <!-- id์—๋Š” ์—ฐ๊ฒฐ๋œ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์˜ ๋ฉ”์„œ๋“œ ์ด๋ฆ„๊ณผ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•œ๋‹ค. -->
    <!-- ๊ฒŒ์‹œ๋ฌผ ๋“ฑ๋ก -->
    <insert id="insert">
        insert into mvc_board(title, content, writer) values(#{title}, #{content}, #{writer})
    </insert>
 

 

 

DB์ปฌ๋Ÿผ๋ช…๊ณผ VOํ•„๋“œ๋ช…์ด ๋‹ค๋ฅผ๊ฒฝ์šฐ ResultMap ์ฒ˜๋ฆฌ

id๋Š” ๊ธฐ๋ณธํ‚ค result๋Š” ๋‚˜๋จธ์ง€

property๋Š” VO์˜ ํ•„๋“œ๋ช… column์€ DB์ปฌ๋Ÿผ๋ช…

BoardMapper.xml์— ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

    <!-- 
        DB ์ปฌ๋Ÿผ๊ณผ VOํ•„๋“œ๋ช…์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ ๋ฆฌ์ ˆํŠธ ๋งต ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• 
        ๊ฐ„๋‹จํ•œ ์ด๋ฆ„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด  mybatis-config.xml์— ์—˜๋ฆฌ์•„์Šค ์„ค์ •์„ ํ•ด์ค€๋‹ค.
        type์— ์›๋ž˜ ๋‹ค ๋“ค์–ด๊ฐ€์•ผํ•˜์ง€๋งŒ ์„ค์ •ํŒŒ์ผ์—์„œ ๋ณ„์นญ์„ ์ •ํ•ด์คฌ๊ธฐ ๋•Œ๋ฌธ์— BoardVO๋กœ๋งŒ ๊ฐ€๋Šฅ
    -->
    <resultMap id="BoardResultMap" type="BoardVO">
        <id property="boardNo" column="board_no" />
        <result property="title" column="title" />
        <result property="content" column="content" />
        <result property="writer" column="writer" />
        <result property="regDate" column="reg_date" />
        <result property="viewCnt" column="view_cnt" />
    </resultMap>
 

 

 

BoardDAO.java

DAO์—์„œ Mapper์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” Mapper์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    //1. ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ๊ธฐ๋Šฅ ๋ฉ”์„œ๋“œ - ๊ฒŒ์‹œ๊ธ€์„ ํ•˜๋‚˜ ๊ฐ€์ ธ์™€์„œ ๋“ฑ๋กํ•œ๋‹ค.
    @Override
    public void insert(BoardVO article) throws Exception {
        //statement ๊ธฐ์ˆ  - BoardMapper์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ 
        //insert๋Š” article์ด ํ•„์š”ํ•˜๋‹ˆ๊นŒ ์ •๋ณด๋ฅผ ๊ฐ™์ด ๋„˜๊ฒจ์ค€๋‹ค.
        sqlSession.insert(NAMESPACE+".insert", article);
    }
 

 

 

Test - BoardDAOTest.java

 
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
import javax.inject.Inject;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
import com.spring.myapp.board.model.BoardVO;
import com.spring.myapp.board.repository.IBoardDAO;
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:/spring/mvc-config.xml"})
public class BoardDAOTest {
 
    //๋กœ๊ทธ๋ฅผ ์ฐ๊ธฐ ์œ„ํ•จ
    private static final Logger logger = LoggerFactory.getLogger(BoardDAOTest.class);
    
    //DAO ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ
    @Inject
    private IBoardDAO boardDAO;
 
    
    //๊ฒŒ์‹œ๋ฌผ ๋“ฑ๋ก ํ…Œ์ŠคํŠธ
    @Test
    public void insertTest() throws Exception {
 
        for (int i = 1; i <= 3000; i++) {
            BoardVO vo = new BoardVO();
            vo.setTitle(i + "๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ๊ฒŒ์‹œ๋ฌผ!!");
            vo.setContent(i + "๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค~~");
            vo.setWriter("user" + i);
            boardDAO.insert(vo);
        }
 
    }
}
 

๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€