๐Ÿ“Œ MyBatis Mapper ์™„์ „ ์ •๋ณต โ‘ก - XML ๋งคํผ ํ™œ์šฉ๋ฒ•

My Pale Blue Dotยท2025๋…„ 4์›” 25์ผ
0

SPRING

๋ชฉ๋ก ๋ณด๊ธฐ
15/36
post-thumbnail

๐Ÿ“… ๋‚ ์งœ

2025-04-25


๐Ÿ“ 1๏ธโƒฃ XML ๋งคํผ๋ž€?

MyBatis์—์„œ XML ๋งคํผ๋Š” SQL์„ ์™ธ๋ถ€ ํŒŒ์ผ(XML)๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ,

๋ณต์žกํ•œ SQL, ๋™์  ์ฟผ๋ฆฌ, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ”น ์–ด๋…ธํ…Œ์ด์…˜ ๋ฐฉ์‹๊ณผ XML ๋ฐฉ์‹ ๋น„๊ต

๊ตฌ๋ถ„์–ด๋…ธํ…Œ์ด์…˜ ๋ฐฉ์‹XML ๋งคํผ ๋ฐฉ์‹
๊ฐ„๋‹จํ•œ CRUD์ ํ•ฉ๊ฐ€๋Šฅ
๋ณต์žกํ•œ SQL์ œํ•œ์ ์šฐ์ˆ˜
๋™์  SQL๋ถˆ๊ฐ€๋Šฅ์ง€์›
์œ ์ง€๋ณด์ˆ˜์–ด๋ ค์›€์œ ๋ฆฌ
์„ค์ • ํŒŒ์ผ์ตœ์†Œํ™”๋ณ„๋„ XML ํ•„์š”
๊ฐ€๋…์„ฑ์ฝ”๋“œ์™€ ํ˜ผํ•ฉSQL ๋ถ„๋ฆฌ๋กœ ๋ช…ํ™•

๐Ÿ’ก Tip:

์–ด๋…ธํ…Œ์ด์…˜ ๋ฐฉ์‹์€ ๋‹จ์ˆœ ์ž‘์—…์—,

XML ๋งคํผ๋Š” ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๊ณ ๋ คํ•œ ๋ณต์žกํ•œ ์ž‘์—…์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“ 2๏ธโƒฃ XML ๋งคํผ ๊ธฐ๋ณธ ๊ตฌ์กฐ

<mapper namespace="com.example.app.domain.mapper.MemoMapper">

    <insert id="insertXml" parameterType="MemoDto">
        INSERT INTO tbl_memo (id, text) VALUES (#{id}, #{text})
    </insert>

    <select id="selectAtXml" parameterType="int" resultType="MemoDto">
        SELECT * FROM tbl_memo WHERE id = #{id}
    </select>

</mapper>

โœ… ์ฃผ์š” ์†์„ฑ ์„ค๋ช…

์†์„ฑ์„ค๋ช…
namespaceMapper ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐ (ํŒจํ‚ค์ง€๋ช… ํฌํ•จ)
id์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ๋ช…๊ณผ ๋งคํ•‘
parameterType์ „๋‹ฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…(๊ธฐ๋ณธํ˜•: int, ์ฐธ์กฐํ˜•: ์ „์ฒด ๊ฒฝ๋กœ)
resultType๋ฐ˜ํ™˜ ํƒ€์ž… (DTO ํด๋ž˜์Šค ์ „์ฒด ๊ฒฝ๋กœ or Map ๋“ฑ)

โš ๏ธ ์ฃผ์˜:

parameterType, resultType์€ ์ •ํ™•ํ•œ ๊ฒฝ๋กœ์™€ ํƒ€์ž…์„ ์ง€์ •ํ•ด์•ผ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“ 3๏ธโƒฃ XML ๊ธฐ๋ฐ˜ CRUD ์˜ˆ์ œ + ํ‚ค ์ƒ์„ฑ ์ฒ˜๋ฆฌ

<insert id="insertXml" parameterType="MemoDto">
    <selectKey keyProperty="id" order="AFTER" resultType="int">
        SELECT MAX(id) + 1 FROM tbl_memo
    </selectKey>
    INSERT INTO tbl_memo (id, text) VALUES (#{id}, #{text})
</insert>
  • selectKey๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ ํ‚ค ์ƒ์„ฑ.
  • ๋˜๋Š” DB์˜ AUTO_INCREMENT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ useGeneratedKeys="true" ์˜ต์…˜ ์‚ฌ์šฉ.

๐Ÿ’ก ํ‚ค ์ƒ์„ฑ ์ „๋žต์€ ๋‹ค์Œ ํŽธ์—์„œ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃน๋‹ˆ๋‹ค!


๐Ÿ“ 4๏ธโƒฃ ๋™์  SQL & ์žฌ์‚ฌ์šฉ์„ฑ

๐Ÿ”น ๋™์  SQL ์˜ˆ์ œ

<select id="selectDynamic" parameterType="Map" resultType="MemoDto">
    SELECT * FROM tbl_memo
    <where>
        <if test="text != null">
            AND text = #{text}
        </if>
        <if test="writer != null">
            AND writer = #{writer}
        </if>
    </where>
</select>

โœ… ํƒœ๊ทธ ์ž๋™ ์ฒ˜๋ฆฌ

  • ์กฐ๊ฑด์ด ์—†์œผ๋ฉด WHERE ์ ˆ ์ƒ๋žต
  • ์ฒซ ๋ฒˆ์งธ AND/OR ์ž๋™ ์ œ๊ฑฐ

๐Ÿ”น SQL ์žฌ์‚ฌ์šฉ ์˜ˆ์‹œ

<sql id="memoColumns">
    id, text, writer, createAt
</sql>

<select id="selectWithColumns" resultType="MemoDto">
    SELECT <include refid="memoColumns"/> FROM tbl_memo
</select>

๐Ÿ“ 5๏ธโƒฃ ์„ค์ • ๋ฐฉ๋ฒ• & Mapper ์—ฐ๊ฒฐ

  • SqlSessionFactory ์„ค์ •
sessionFactory.setMapperLocations(
    new PathMatchingResourcePatternResolver().getResources("classpath:/mappers/*.xml")
);
  • ์ธํ„ฐํŽ˜์ด์Šค ์—ฐ๊ฒฐ ๊ทœ์น™
    • namespace โž” Mapper ์ธํ„ฐํŽ˜์ด์Šค ๊ฒฝ๋กœ์™€ ์ผ์น˜
    • ๋ฉ”์„œ๋“œ๋ช… = XML์˜ id ์†์„ฑ๊ฐ’๊ณผ ์ผ์น˜

์˜ˆ์‹œ:

public interface MemoMapper {
    int insertXml(MemoDto dto);  // โž” XML์˜ id="insertXml"
}

๐Ÿ“ 6๏ธโƒฃ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์˜ˆ์‹œ

@Test
void testInsertXml() {
    MemoDto dto = new MemoDto(null, "XML Insert Test", "user@domain.com", LocalDateTime.now(), null);
    int result = memoMapper.insertXml(dto);
    assertEquals(1, result);
}

โš ๏ธ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜

  1. XML ๋งคํผ ๊ฒฝ๋กœ ์ธ์‹ ์‹คํŒจ
    • setMapperLocations ์„ค์ • ๋ˆ„๋ฝ
  2. resultType, parameterType ๊ฒฝ๋กœ ์˜ค๋ฅ˜
    • ํŒจํ‚ค์ง€๋ช… ํฌํ•จ ์ „์ฒด ๊ฒฝ๋กœ ํ™•์ธ
  3. SQL ๋์— ์„ธ๋ฏธ์ฝœ๋ก (;) ์ž‘์„ฑ
  4. ํŒŒ๋ผ๋ฏธํ„ฐ ๋งคํ•‘ ์˜ค๋ฅ˜
    • ์˜ˆ: "Parameter 'id' not found"
    • ํ•ด๊ฒฐ: ํŒŒ๋ผ๋ฏธํ„ฐ ๋ช…์นญ ์ผ์น˜ ์—ฌ๋ถ€ ํ™•์ธ ๋˜๋Š” @Param ์‚ฌ์šฉ

๐Ÿ”ฅ ์ •๋ฆฌ

  • XML ๋งคํผ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ€๋…์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ํ™•์žฅ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋™์  SQL๊ณผ SQL ์žฌ์‚ฌ์šฉ ๊ธฐ๋Šฅ์„ ์ ๊ทน ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค์ •๊ณผ ๊ฒฝ๋กœ ์ง€์ •์— ์ฃผ์˜ํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ


profile
Here, My Pale Blue.๐ŸŒ

0๊ฐœ์˜ ๋Œ“๊ธ€