๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java·๏ปฟServlet·๏ปฟJSP/Library·Framework

MyBatis ์„ค์ • ํŒŒ์ผ - SQL Mapper ์ž‘์„ฑ ๋ฐฉ๋ฒ•

by Leica 2020. 2. 23.
๋ฐ˜์‘ํ˜•
  • ๊ด€๋ จ ๊ธ€

- [JAVA/WEB] ์›น ํ”„๋กœ์ ํŠธ์— MyBatis ์„ธํŒ… ๋ฐ ์ ์šฉํ•˜๊ธฐ


MyBatis ์„ค์ • ํŒŒ์ผ - SQL Mapper ์ž‘์„ฑ ๋ฐฉ๋ฒ•

 

MyBatis ์‚ฌ์šฉ ๋ชฉ์  ์ค‘ ํ•˜๋‚˜๋Š” DAO๋กœ๋ถ€ํ„ฐ SQL๋ฌธ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ถ„๋ฆฌ๋œ SQL๋ฌธ์€ SQL mapper ํŒŒ์ผ์— ์ž‘์„ฑํ•˜๋ฉฐ DAO์—์„œ๋Š” SqlSession ๊ฐ์ฒด๊ฐ€ SQL mapper ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.

 

๋‹ค์Œ์€ MyBatis SQL mapper ํŒŒ์ผ์˜ ์˜ˆ์ด๋‹ค.

 

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
<?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="com.atoz_develop.spms.dao.ProjectDao">
    <resultMap type="project" id="projectResultMap">
        <id column="PNO" property="no" />
        <result column="PNAME" property="title" />
        <result column="CONTENT" property="content" />
        <result column="STA_DATE" property="startDate" javaType="java.sql.Date" />
        <result column="END_DATE" property="endDate" javaType="java.sql.Date" />
        <result column="STATE" property="state" />
        <result column="CRE_DATE" property="createdDate" javaType="java.sql.Date" />
        <result column="TAGS" property="tags" />
    </resultMap>
 
    <select id="selectList" resultMap="projectResultMap">
        select PNO, PNAME, STA_DATE, END_DATE, STATE
        from PROJECTS
        order by PNO desc
    </select>
 
    <insert id="insert" parameterType="project">
        insert into PROJECTS(PNAME, CONTENT, STA_DATE, END_DATE, STATE, CRE_DATE, TAGS)
        values (#{title}, #{content}, #{startDate}, #{endDate}, 0, NOW(), #{tags})
    </insert>
 
    <select id="selectOne" parameterType="int" resultMap="projectResultMap">
        select PNO, PNAME, CONTENT, STA_DATE, END_DATE, STATE, CRE_DATE, TAGS
        from PROJECTS
        where PNO = #{no}
    </select>
 
    <update id="update" parameterType="project">
        update PROJECTS set
            PNAME = #{title},
            CONTENT = #{content},
            STA_DATE = #{startDate},
            END_DATE = #{endDate},
            STATE = #{state},
            TAGS = #{tags}
        where PNO = #{no}
    </update>
 
    <delete id="delete" parameterType="int">
        delete from PROJECTS
        where PNO = #{no}
    </delete>
</mapper>
cs

 

1. XML๊ณผ DTD ์„ ์–ธ

SQL mapper ํŒŒ์ผ์€ XML์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๋จผ์ € XML ์„ ์–ธ์ด ์˜จ๋‹ค.

 

 

๋‹ค์Œ์œผ๋กœ ํƒœ๊ทธ ๊ทœ์น™์„ ์ •์˜ํ•œ DTD ์„ ์–ธ์ด ์˜จ๋‹ค.

 

 

2. Root Element - <mapper>

SQL mapper ํŒŒ์ผ์€ ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ <mapper>๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.

<mapper>์˜ namespace ์†์„ฑ์€ ์ž๋ฐ”์˜ ํŒจํ‚ค์ง€์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ๊ฐœ์˜ SQL๋ฌธ์„ ๋ฌถ๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

mapper ํŒŒ์ผ์— ์ž‘์„ฑํ•˜๋Š” ๋ชจ๋“  SQL๋ฌธ์€ <mapper> ํ•˜์œ„์— ๋†“์—ฌ์•ผ ํ•œ๋‹ค.

 

 

 

3. <select>, <insert>, <update>, <delete>

 

SQL ๋ช…๋ น์–ด์— ๋”ฐ๋ผ SELECT๋ฌธ์€ <select>, INSERT๋ฌธ์€ <insert>, UPDATE๋ฌธ์€ <update>, DELETE๋ฌธ์€ <delete>์— ์ž‘์„ฑํ•œ๋‹ค.

 

์†์„ฑ ์„ค๋ช…
id ๊ฐ SQL๋ฌธ์„ ๊ตฌ๋ถ„
resultType SELECT๋ฌธ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์„ ๊ฐ์ฒด
ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ํฌํ•จํ•œ ํด๋ž˜์Šค ์ด๋ฆ„ ๋˜๋Š” ๊ฐ์ฒด alias ์ง€์ •
resultMap SELECT๋ฌธ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์„ ๊ฐ์ฒด๋ฅผ resultMap์œผ๋กœ ์ง€์ •
<resultMap>์„ ๋”ฐ๋กœ ์„ ์–ธํ•ด์ค˜์•ผ ํ•œ๋‹ค.
resultType๊ณผ resultMap ์ค‘ ํ•˜๋‚˜๋ฅผ ํƒํ•ด์„œ ์„ค์ •ํ•œ๋‹ค.
parameterType
์ด ์†์„ฑ์— ์ง€์ •ํ•œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๊ฐ’์ด SQL๋ฌธ์˜ ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ง€์ •๋œ๋‹ค.

 

resultType ์†์„ฑ

SELECT๋ฌธ์„ ์‹คํ–‰ํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ ์ด ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์„ ๊ฐ์ฒด๋ฅผ resultType ์†์„ฑ์— ์ง€์ •ํ•œ๋‹ค.

resultType์—๋Š” ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ํฌํ•จํ•œ ์ „์ฒด ํด๋ž˜์Šค๋ช…์„ ์ง€์ •ํ•˜๋˜์ง€ ๊ฐ์ฒด์˜ alias๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

alias๋Š” MyBatis ์„ค์ •ํŒŒ์ผ์— ์„ค์ •ํ•œ๋‹ค.

 

๋‹ค์Œ ๋‘ ์„ค์ •์€ ๋™์ผํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ํฌํ•จํ•œ ์ „์ฒด ํด๋ž˜์Šค๋ช… ์ง€์ •

1
2
3
4
5
<select id="selectList" resultMap="com.atoz_develop.spms.vo.Project">
    select PNO, PNAME, STA_DATE, END_DATE, STATE
    from PROJECTS
    order by PNO desc
</select>
cs

 

๊ฐ์ฒด์˜ alias ์ง€์ •

1
2
3
4
5
6
7
8
9
10
11
<!-- MyBatis ์„ค์ •ํŒŒ์ผ -->
<typeAliases>
    <typeAliase type="com.atoz_develop.spms.vo.Project" alias="project"/>
</typeAliases>
 
<!-- SQL Mapper ํŒŒ์ผ -->
<select id="selectList" resultMap="project">
    select PNO, PNAME, STA_DATE, END_DATE, STATE
    from PROJECTS
    order by PNO desc
</select>
cs

 

MyBatis๋Š” SELECT ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด resultType์— ์ง€์ •๋œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ ์ปฌ๋Ÿผ์— ๋Œ€์‘ํ•˜๋Š” setter๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

์ปฌ๋Ÿผ๋ช…์ด PNO, PNAME, STA_DATE, END_DATE, STATE์ด๋ฉด ๊ฐ๊ฐ setPno(), setPname(), setSta_date(), setEnd_date(), setState()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

์ปฌ๋Ÿผ์— ๋งž๋Š” setter๊ฐ€ ์—†์œผ๋ฉด ๊ทธ ์ปฌ๋Ÿผ์˜ ๊ฐ’์€ ๊ฐ์ฒด์— ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

์ปฌ๋Ÿผ๋ช…๊ณผ setter ์ด๋ฆ„์ด ๋‹ฌ๋ผ์„œ ๊ฐ’์ด ์ €์žฅ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด SELECT๋ฌธ์˜ ๊ฐ ์ปฌ๋Ÿผ์— as๋กœ alias๋ฅผ ๋ถ™์ด๋ฉด ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ปฌ๋Ÿผ๋ช…์ด PNO์ธ๋ฐ setter๊ฐ€ setNo()๋ผ๋ฉด SELECT PNO as NO... ์™€ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.

 

resultMap ์†์„ฑ๊ณผ <resultMap> ์—˜๋ฆฌ๋จผํŠธ

resultType ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด setter์™€ ๋งค์นญ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ฐ ์ปฌ๋Ÿผ๋งˆ๋‹ค alias๋ฅผ ๋ถ™์—ฌ์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค.

resultMap ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด <resultMap>์— ์ปฌ๋Ÿผ๊ณผ ๋งค์นญ๋˜๋Š” setter ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

๊ฐ ์—˜๋ฆฌ๋จผํŠธ์™€ ์†์„ฑ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

  • <resultMap>.type: SELECT ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ํด๋ž˜์Šค ์ด๋ฆ„ ๋˜๋Š” MyBatis ์„ค์ •ํŒŒ์ผ์— ์„ค์ •๋œ alias
  • <resultMap>.id: resultMap์˜ id
  • <id>: ๊ฐ์ฒด ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํผํ‹ฐ
  • <id>.column: ์ปฌ๋Ÿผ๋ช…
  • <id>.property: ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ๋ช…(setter ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์—์„œ set์„ ๋นผ๊ณ  ์ฒซ ์•ŒํŒŒ์—ฃ์„ ์†Œ๋ฌธ์ž๋กœ ๋งŒ๋“  ์ด๋ฆ„)
  • <result>: ์ปฌ๋Ÿผ-setter ์—ฐ๊ฒฐ ์ •์˜
  • <result>.column: ์ปฌ๋Ÿผ๋ช…
  • <result>.property: ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ๋ช…(setter ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์—์„œ set์„ ๋นผ๊ณ  ์ฒซ ์•ŒํŒŒ์—ฃ์„ ์†Œ๋ฌธ์ž๋กœ ๋งŒ๋“  ์ด๋ฆ„)
  • <result>.javaType: ์ปฌ๋Ÿผ ๊ฐ’์„ ํŠน์ • ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ• ๋•Œ ์‚ฌ์šฉ

 

์ •์˜ํ•œ <resultMap>์€ <select>์˜ resultMap ์†์„ฑ์— <resultMap>์˜ id๋ฅผ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

<id> ์—˜๋ฆฌ๋จผํŠธ์™€ MyBatis์˜ SELECT ๊ฒฐ๊ณผ ์บ์‹ฑ

ํŠนํžˆ <id> ์—˜๋ฆฌ๋จผํŠธ๋Š” ์„ค์ • ๋ฐฉ๋ฒ•์€ <result> ์—˜๋ฆฌ๋จผํŠธ์™€ ๋™์ผํ•˜์ง€๋งŒ ํŠน๋ณ„ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.

MyBatis๋Š” <id>๋ฅผ ์ด์šฉํ•ด์„œ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๋ฒ„๋ฆฌ์ง€ ์•Š๊ณ  ๋ณด๊ด€ํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.

 

SELECT๋ฌธ์„ ์‹คํ–‰ํ•˜๋ฉด ๋ ˆ์ฝ”๋“œ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฐ๊ณผ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ด ๋•Œ SELECT๋ฌธ์„ ์‹คํ–‰ํ•  ๋•Œ ๋งˆ๋‹ค ๋งค๋ฒˆ ๊ฒฐ๊ณผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๊ฒฐ๊ณผ ๊ฐ์ฒด๋“ค์„ ๊ฐ์ฒด pool์— caching(์บ์‹ฑ)ํ•ด๋‘๊ณ  ๋‹ค์Œ SELECT๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ์ฒด pool์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐ’์œผ๋กœ <id>์—์„œ ์ง€์ •ํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

parameterType ์†์„ฑ๊ณผ SQL๋ฌธ์˜ ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ

JDBC์—์„œ PreparedStatement ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ SQL๋ฌธ์„ ์‹คํ–‰ํ• ๋•Œ '?'๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  setXXX() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ์ง€์ •ํ•œ๋‹ค.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
pstmt = connection.prepareStatement(
        "INSERT INTO STUDENT(STUDENT_NO, DEPARTMENT, STUDENT_NAME, GRADE, GENDER, AGE, PHONE_NUMBER, ADDRESS, PASSWORD)" +
                " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"
);
 
pstmt.setString(1, student.getStudentNo());
pstmt.setString(2, student.getDepartment());
pstmt.setString(3, student.getStudentName());
pstmt.setInt(4, student.getGrade());
pstmt.setString(5, student.getGender());
pstmt.setInt(6, student.getAge());
pstmt.setString(7, student.getPhoneNumber());
pstmt.setString(8, student.getAddress());
pstmt.setString(9, student.getPassword());
cs

 

MyBatis์—์„œ๋Š” ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ '#{ํ”„๋กœํผํ‹ฐ}'๋กœ ํ‘œ์‹œํ•œ๋‹ค.

 

#{ํ”„๋กœํผํ‹ฐ}์— ์ง€์ •๋˜๋Š” ๊ฐ’์€ <select>, <insert>, <update>, <delete>์˜ parameterType์— ์ง€์ •๋œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๊ฐ’์ด๋‹ค.

์ฆ‰ #{title}์—๋Š” ๊ฐ์ฒด์˜ getTitle() ๋ฐ˜ํ™˜๊ฐ’์ด ์ง€์ •๋œ๋‹ค.

 

์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’ ๊ณต๊ธ‰

DAO์—์„œ SqlSession์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ• ๋•Œ VO๋ฅผ ์ „๋‹ฌํ•ด์„œ ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๊ณต๊ธ‰ํ•œ๋‹ค.

 

์œ„์™€ ๊ฐ™์ด insert()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด SQL mapper ํŒŒ์ผ์—์„œ 'com.atoz_develop.spms.dao.ProjectDao.insert' id๋ฅผ ๊ฐ€์ง„ SQL๋ฌธ์„ ์ฐพ์•„ ์‹คํ–‰ํ•œ๋‹ค.

project๋Š” ํ•ด๋‹น SQL๋ฌธ์„ ์‹คํ–‰ํ•  ๋•Œ ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๊ณต๊ธ‰ํ•  ๊ฐ์ฒด์ด๋‹ค.

 

๊ฐ’์„ ๊ณต๊ธ‰ํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ๊ธฐ๋ณธ ํƒ€์ž…์ธ ๊ฒฝ์šฐ

์œ„์™€ ๊ฐ™์ด ๊ธฐ๋ณธ ํƒ€์ž…์„ ์ „๋‹ฌํ•˜๋ฉด auto-boxing์œผ๋กœ wrapper ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ „๋‹ฌ๋œ๋‹ค.

wrapper ํƒ€์ž…์€ getter๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ”„๋กœํผํ‹ฐ๋ช…๋„ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋”ฐ๋ผ์„œ SQL mapper์—์„œ ์–ด๋–ค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- ์ด๋ ‡๊ฒŒ ํ•ด๋„ ๋˜๊ณ  -->
<select id="selectOne" parameterType="int" resultMap="projectResultMap">
    select PNO, PNAME, CONTENT, STA_DATE, END_DATE, STATE, CRE_DATE, TAGS
    from PROJECTS
    where PNO = #{no}
</select>
 
<!-- ์ด๋ ‡๊ฒŒ ํ•ด๋„ ๋œ๋‹ค -->
<select id="selectOne" parameterType="int" resultMap="projectResultMap">
    select PNO, PNAME, CONTENT, STA_DATE, END_DATE, STATE, CRE_DATE, TAGS
    from PROJECTS
    where PNO = #{value}
</select>
cs

 

4. MyBatis ์„ค์ • ํŒŒ์ผ์— ๋“ฑ๋ก

์ž‘์„ฑํ•œ SQL mapper ํŒŒ์ผ์€ MyBatis๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ MyBatis ์„ค์ • ํŒŒ์ผ์— ๋“ฑ๋กํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

MyBatis ์„ค์ • ํŒŒ์ผ์˜ <mappers> ํƒœ๊ทธ ํ•˜์œ„์— ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

MyBatis ์„ค์ • ํŒŒ์ผ ์ž‘์„ฑ ๊ฐ€์ด๋“œ ๋ฌธ์„œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์••์ถ• ํŒŒ์ผ ๋‚ด์— mybatis-x.x.x.pdf ์™€ ๊ฐ™์ด PDF ํŒŒ์ผ๋กœ๋„ ์ œ๊ณต๋œ๋‹ค.

ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ํ•จ๊ป˜ ์ฐธ์กฐํ•˜๋ฉด ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.


  • ๊ด€๋ จ ๊ธ€

- [JAVA/WEB] ์›น ํ”„๋กœ์ ํŠธ์— MyBatis ์„ธํŒ… ๋ฐ ์ ์šฉํ•˜๊ธฐ

 

References

์—ดํ˜ˆ๊ฐ•์˜ ์ž๋ฐ” ์›น ๊ฐœ๋ฐœ ์›Œํฌ๋ถ(ํ”„๋ฆฌ๋ ‰, 2016, ์—„์ง„์˜)

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€