๐Ÿ“Œ MyBatis Mapper ์™„์ „ ์ •๋ณต โ‘  - ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ CRUD

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

SPRING

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

๐Ÿ“… ๋‚ ์งœ

2025-04-25


๐Ÿ“ 1๏ธโƒฃ MyBatis Mapper๋ž€?

MyBatis๋Š” SQL ์ค‘์‹ฌ์˜ ํผ์‹œ์Šคํ„ด์Šค ํ”„๋ ˆ์ž„์›Œํฌ๋กœ,

๋ณต์žกํ•œ JDBC ์ฝ”๋“œ๋ฅผ ๋Œ€์ฒดํ•ด SQL๊ณผ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ๋งคํ•‘ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๊ทธ ์ค‘์‹ฌ์— ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Mapper!

Mapper๋Š” ์ž๋ฐ” ๋ฉ”์„œ๋“œ์™€ SQL์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ,

XML ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด SQL์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก ์ฆ‰, ์ง์ ‘ JDBC ์ฝ”๋“œ ์—†์ด๋„ ๊น”๋”ํ•˜๊ฒŒ DB ์ž‘์—… ๊ฐ€๋Šฅ!


๐Ÿ“ 2๏ธโƒฃ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ Mapper์˜ ํŠน์ง•

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

๐Ÿ’ก Tip:

๋‹จ์ˆœ CRUD โž” ์–ด๋…ธํ…Œ์ด์…˜

๋ณต์žกํ•œ ๋กœ์ง โž” XML ๋งคํผ ์ถ”์ฒœ!


๐Ÿ“ 3๏ธโƒฃ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ CRUD ์˜ˆ์ œ

@Mapper
public interface MemoMapper {

    @Insert("INSERT INTO tbl_memo (id, text, writer, createAt) VALUES (#{id}, #{text}, #{writer}, #{createAt})")
    int insert(MemoDto memoDto);

    @Update("UPDATE tbl_memo SET text=#{text} WHERE id=#{id}")
    int update(MemoDto dto);

    @Delete("DELETE FROM tbl_memo WHERE id=#{id}")
    int delete(int id);

    @Select("SELECT * FROM tbl_memo WHERE id=#{id}")
    MemoDto selectAt(int id);

    @Select("SELECT * FROM tbl_memo")
    List<MemoDto> selectAll();
}

โšก ์‹ค๋ฌด ํŒ:

  • ํ•ญ์ƒ ์ปฌ๋Ÿผ๋ช…์„ ๋ช…์‹œํ•˜์ž!
  • SELECT *๋ณด๋‹ค๋Š” ๋ช…ํ™•ํ•œ ์ปฌ๋Ÿผ ์ง€์ •์ด ์œ ์ง€๋ณด์ˆ˜์— ์œ ๋ฆฌ.

๐Ÿ“ 4๏ธโƒฃ @Results์™€ Map ๊ธฐ๋ฐ˜ ์กฐํšŒ

@Results(id="MemoResultMap", value={
    @Result(property="id", column="id"),
    @Result(property="text", column="text")
})
@Select("SELECT * FROM tbl_memo")
List<Map<String, Object>> selectAllResultMap();

๐Ÿ”น DTO vs Map ๋น„๊ต

๊ตฌ๋ถ„DTO ๋งคํ•‘Map ์กฐํšŒ
ํƒ€์ž…ํƒ€์ž… ์•ˆ์ „Object ๊ธฐ๋ฐ˜
์‚ฌ์šฉ์ฒ˜์ •ํ˜• ๋ฐ์ดํ„ฐ์œ ๋™์  ๋ฐ์ดํ„ฐ
์žฅ์ ๋ช…ํ™•ํ•œ ๊ตฌ์กฐ์œ ์—ฐ์„ฑ
๋‹จ์ ๋ณ€๊ฒฝ ์‹œ DTO ์ˆ˜์ • ํ•„์š”ํƒ€์ž… ์บ์ŠคํŒ… ํ•„์š”

โœ”๏ธ ์ถœ๋ ฅ ์˜ˆ์‹œ

{id=1010, text=Hello}
{id=1011, text=World}

๐Ÿ“ 5๏ธโƒฃ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ & ์‹คํ–‰ ๊ฒฐ๊ณผ

@Test
void testInsert() {
    MemoDto dto = new MemoDto(1010, "Test Memo", "tester@naver.com", LocalDateTime.now(), null);
    int result = memoMapper.insert(dto);
    assertEquals(1, result);
}

โœ… DB ํ™•์ธ ๊ฒฐ๊ณผ

idtextwritercreateAt
1010Test Memotester@naver.com2025-04-25 12:30

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

  1. ์„ธ๋ฏธ์ฝœ๋ก (;) ์‚ฌ์šฉ
    • MyBatis SQL ๋์— ; ์ž‘์„ฑ ๊ธˆ์ง€!
  2. ํŒŒ๋ผ๋ฏธํ„ฐ ๋งคํ•‘ ์˜ค๋ฅ˜
    • DTO ํ•„๋“œ๋ช… โ†”๏ธ SQL ์ปฌ๋Ÿผ๋ช… ์ผ์น˜ ์—ฌ๋ถ€ ํ™•์ธ!
    • ๋‹ค์ค‘ ํŒŒ๋ผ๋ฏธํ„ฐ ์‹œ @Param ๊ผญ ์‚ฌ์šฉ.
  3. @Mapper ์–ด๋…ธํ…Œ์ด์…˜ ๋ˆ„๋ฝ
    • Mapper ์ธ์‹์ด ์•ˆ๋˜๋ฉด ๋“ฑ๋ก๋ถ€ํ„ฐ ํ™•์ธ!

๐Ÿ”ฅ ์ •๋ฆฌ

  • ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ Mapper๋Š” ๋น ๋ฅธ ๊ฐœ๋ฐœ๊ณผ ๋‹จ์ˆœ CRUD์— ์ ํ•ฉ.
  • ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋Š” XML ๋งคํผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒŒ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค.
  • ์‹ค์ˆ˜ ๋ฐฉ์ง€ ํฌ์ธํŠธ๋ฅผ ์ˆ™์ง€ํ•˜๊ณ , ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ๊ฒ€์ฆํ•˜์ž!

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


profile
Here, My Pale Blue.๐ŸŒ

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