๐Ÿ“Œ MyBatis Mapper ์™„์ „ ์ •๋ณต โ‘ฃ - ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ & ์‹ค์ „ ํŒ

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

SPRING

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

๐Ÿ“… ๋‚ ์งœ

2025-04-25


๐Ÿ“ 1๏ธโƒฃ MyBatis์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ 

MyBatis๋Š” SQL์„ ์ง์ ‘ ๋‹ค๋ฃจ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๊ธฐ ๋•Œ๋ฌธ์—,

์„ค์ • ์‹ค์ˆ˜, ๊ฒฝ๋กœ ์˜ค๋ฅ˜, SQL ๊ตฌ๋ฌธ ์˜ค๋ฅ˜ ๋“ฑ ์‚ฌ์†Œํ•œ ์‹ค์ˆ˜๊ฐ€ ์‰ฝ๊ฒŒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋Š” ํŒจํ„ดํ™”๋œ ์‹ค์ˆ˜๊ฐ€ ๋งŽ์•„ ๋ฏธ๋ฆฌ ์•Œ๊ณ  ๋Œ€๋น„ํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“ 2๏ธโƒฃ Mapper ์„ค์ • ๊ด€๋ จ ์˜ค๋ฅ˜

โš ๏ธ 1. namespace ๋ถˆ์ผ์น˜

  • ์›์ธ: XML ๋งคํผ์˜ namespace์™€ Mapper ์ธํ„ฐํŽ˜์ด์Šค ๊ฒฝ๋กœ๊ฐ€ ๋‹ค๋ฅผ ๋•Œ ๋ฐœ์ƒ.
  • ํ•ด๊ฒฐ: ํ•ญ์ƒ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ๊นŒ์ง€ ์ •ํ™•ํžˆ ์ผ์น˜์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
<mapper namespace="com.example.app.domain.mapper.MemoMapper">

โš ๏ธ 2. ๋งคํผ ์Šค์บ” ๋ˆ„๋ฝ

  • ์›์ธ: @MapperScan ๋˜๋Š” <mybatis-spring:scan> ์„ค์ • ๋ˆ„๋ฝ.
  • ํ•ด๊ฒฐ: Spring ์„ค์ • ํŒŒ์ผ์—์„œ ๋งคํผ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋“ฑ๋ก.
<mybatis-spring:scan base-package="com.example.app.domain.mapper"/>

โš ๏ธ 3. XML ๊ฒฝ๋กœ ์„ค์ • ์˜ค๋ฅ˜

  • ์›์ธ: setMapperLocations ๊ฒฝ๋กœ ์ง€์ • ์‹ค์ˆ˜.
  • ํ•ด๊ฒฐ: ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋ฅผ ์ •ํ™•ํžˆ ์„ค์ •.
sessionFactory.setMapperLocations(
    new PathMatchingResourcePatternResolver().getResources("classpath:/mappers/*.xml")
);

๐Ÿ“ 3๏ธโƒฃ SQL ์ž‘์„ฑ ์‹œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜

โš ๏ธ 1. ์„ธ๋ฏธ์ฝœ๋ก (;) ์‚ฌ์šฉ

  • MyBatis SQL ๊ตฌ๋ฌธ ๋์— ;์„ ์ž‘์„ฑํ•˜๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒ.
  • ํ•ด๊ฒฐ: SQL ๋์—๋Š” ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋ถ™์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โš ๏ธ 2. ์ปฌ๋Ÿผ๋ช… ์˜คํƒ€

  • ์›์ธ: SQL ๋‚ด ์ปฌ๋Ÿผ๋ช…์„ ์ž˜๋ชป ์ž…๋ ฅ.
  • ํ•ด๊ฒฐ: DB ์Šคํ‚ค๋งˆ ๊ธฐ์ค€์œผ๋กœ ์ •ํ™•ํ•œ ์ปฌ๋Ÿผ๋ช… ์‚ฌ์šฉ.

โš ๏ธ 3. ํŒŒ๋ผ๋ฏธํ„ฐ ๋งคํ•‘ ์˜ค๋ฅ˜

  • ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: "Parameter 'id' not found. Available parameters are..."
  • ์›์ธ:
    • DTO ํ•„๋“œ๋ช…๊ณผ SQL ๋งคํ•‘ ๋ถˆ์ผ์น˜.
    • ๋‹ค์ค‘ ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ ์‹œ @Param ๋ˆ„๋ฝ.
  • ํ•ด๊ฒฐ:
    • DTO ํ•„๋“œ๋ช…๊ณผ SQL์˜ #{} ์ด๋ฆ„์„ ์ผ์น˜.
    • ๋‹ค์ค‘ ํŒŒ๋ผ๋ฏธํ„ฐ ์‹œ @Param ํ™œ์šฉ.
int deleteXml(@Param("id") int id);

๐Ÿ“ 4๏ธโƒฃ resultType & parameterType ์˜ค๋ฅ˜

โš ๏ธ 1. ๊ฒฝ๋กœ ์˜ค๋ฅ˜

  • ์›์ธ: ํŒจํ‚ค์ง€ ์ „์ฒด ๊ฒฝ๋กœ ๋ˆ„๋ฝ.
  • ํ•ด๊ฒฐ: ํ•ญ์ƒ ํ’€ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ๋ฅผ ์ž‘์„ฑ.
<select id="selectAtXml" resultType="com.example.app.domain.dto.MemoDto">

โš ๏ธ 2. ํƒ€์ž… ๋ฏธ์Šค๋งค์นญ

  • ๊ธฐ๋ณธํ˜•์€ ์†Œ๋ฌธ์ž ์‚ฌ์šฉ (int, string), ๊ฐ์ฒดํ˜•์€ ์ „์ฒด ๊ฒฝ๋กœ ์‚ฌ์šฉ.

๐Ÿ“ 5๏ธโƒฃ ํ‚ค ์ƒ์„ฑ ๊ด€๋ จ ์˜ค๋ฅ˜

โš ๏ธ 1. useGeneratedKeys ์„ค์ • ๋ˆ„๋ฝ

  • ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: "Generated keys not requested"
  • ํ•ด๊ฒฐ: INSERT ๊ตฌ๋ฌธ์— useGeneratedKeys="true" ์ถ”๊ฐ€.

โš ๏ธ 2. selectKey ๋™์‹œ์„ฑ ๋ฌธ์ œ

  • ์›์ธ: SELECT MAX(id) + 1 ๋ฐฉ์‹์€ ๋™์‹œ์„ฑ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.
  • ํ•ด๊ฒฐ: ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด DB์˜ AUTO_INCREMENT ๋˜๋Š” ์‹œํ€€์Šค ์‚ฌ์šฉ ๊ถŒ์žฅ.

๐Ÿ“ 6๏ธโƒฃ ๋™์  SQL ์˜ค๋ฅ˜

โš ๏ธ 1. , ํƒœ๊ทธ ์˜ค์šฉ

  • <where> ํƒœ๊ทธ ๋‚ด๋ถ€์— ์กฐ๊ฑด์ด ์—†์œผ๋ฉด SQL ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ๋ฐœ์ƒ.
  • ํ•ด๊ฒฐ: ์กฐ๊ฑด์ด ์—†์„ ๋•Œ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๊ธฐ๋ณธ ์กฐ๊ฑด ์„ค์ •์„ ๊ณ ๋ ค.

โš ๏ธ 2. NullPointerException

  • ์›์ธ: ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ null์ผ ๋•Œ ๊ตฌ๋ฌธ์—์„œ ๋ฐœ์ƒ.
  • ํ•ด๊ฒฐ: ์•ˆ์ „ํ•˜๊ฒŒ null ์ฒดํฌ ๋กœ์ง ์ž‘์„ฑ.
<if test="text != null and text != ''">
    AND text = #{text}
</if>

๐Ÿ“ 7๏ธโƒฃ ์‹ค์ „ ํŒ ๋ชจ์Œ

โœ… 1. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ฆ

  • CRUD ๊ธฐ๋Šฅ๋งˆ๋‹ค JUnit ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ํ™•์ธ.

โœ… 2. SQL ๋กœ๊ทธ ์„ค์ •

  • MyBatis ์‹คํ–‰ ์ฟผ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Log ์„ค์ •์„ ํ™œ์šฉ.
<logger name="org.mybatis" level="DEBUG"/>

โœ… 3. Mapper & XML ๊ด€๋ฆฌ ์ „๋žต

  • ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜ ํ†ต์ผ:
    • ์ธํ„ฐํŽ˜์ด์Šค: MemoMapper.java
    • XML: MemoMapper.xml
  • ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์œ ์ง€.

๐Ÿ”ฅ ์ •๋ฆฌ - MyBatis ์˜ค๋ฅ˜ ๋ฐฉ์ง€ ์ฒดํฌ๋ฆฌ์ŠคํŠธ โœ…

  • namespace, ๊ฒฝ๋กœ ์ผ์น˜ ํ™•์ธ
  • ์„ธ๋ฏธ์ฝœ๋ก (;) ์‚ฌ์šฉ ์—ฌ๋ถ€ ์ ๊ฒ€
  • parameterType, resultType ๊ฒฝ๋กœ ๊ฒ€ํ† 
  • ํ‚ค ์ƒ์„ฑ ์ „๋žต ์„ค์ • ํ™•์ธ
  • ๋™์  SQL null ์ฒดํฌ
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ๋ฐ˜๋ณต ๊ฒ€์ฆ
  • SQL ๋กœ๊ทธ ํ™œ์„ฑํ™”

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


profile
Here, My Pale Blue.๐ŸŒ

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