๊ฐœ๋ฐœ.log/framework

[Mybatis][iBatis] org.apache.ibatis.binding.BindingException ์—๋Ÿฌํ•ด๊ฒฐ - ๋‹ค์ค‘ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ์ฒด(DTO, String)๋„˜๊ธฐ๊ธฐ

๊ฐœ๋ฐœํ•˜๋Š” ์ฃผ๋””์”จ 2023. 9. 18. 15:17

 

 

org.mybatis.spring.MyBatisSystemException : nested exception is ...


๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋ถ„๋ช… mybatis parameter Binding ์˜ค๋ฅ˜๊ฐ€ ๋‚œ ์ ์ด ์—†์—ˆ๋Š”๋ฐ;;; ์˜ค๋žœ๋งŒ์— ๊ตฌ๊ธ€๋งํ•˜์—ฌ ๊ณต๋ฐฑ์ด ์žˆ๋Š”์ง€.. ๋งˆ๊ฐํƒœ๊ทธ๋Š” ์ž˜ ๋‹ซํ˜€์žˆ๋Š”์ง€,, ์ผ๋ฐ˜์ ์œผ๋กœ ํ™•์ธํ•  ๋ถ€๋ถ„๋“ค์„ ํ•œ์ฐธ ํ™•์ธํ•˜๊ณ  ๋‚˜์„œ๋„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค...

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ์•„๋ž˜ ์‚ฌ์‹ค์„ ๊ฐ„๊ณผํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ณ , ๊ฒธํ—ˆํ•œ ๋งˆ์Œ์œผ๋กœ ๋‹ค์‹œ ๋ฐฐ์šฐ๊ณ ์ž ํ•œ๋‹ค.

 

MyBatis์™€ iBatis๋Š” ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ, ๊ฐ๊ฐ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋™์ž‘ ๋ฐฉ์‹์ด ์กฐ๊ธˆ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•œ ๊ทœ์น™ ๋ฐ ๊ธฐ๋ณธ ์„ค์ •๋„ ์ด ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ„์— ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

 

์•„๋ž˜ 3.0.0 ๊ธฐ์ค€์—์„œ๋Š” ๋ณ„๋„์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ ๋„, ์ž๋™์œผ๋กœ ๋„˜๊ธด parameter ๋“ค์ด ์ž˜ ๋ฐ”์ธ๋”ฉ๋˜์—ˆ๋‹ค.

implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.0'

 

 

ํ•˜์ง€๋งŒ 2.2.0 ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํ˜„ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0'

 

MyBatis์—์„œ์˜ @Param ์–ด๋…ธํ…Œ์ด์…˜

MyBatis์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด @Param ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด MyBatis๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์„ ์ฐพ์•„์„œ SQL ์ฟผ๋ฆฌ์— ๋งคํ•‘ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

 

iBatis

๊ณผ๊ฑฐ ๋ฒ„์ „์˜ iBatis์—์„œ๋Š” @Param ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ์ด ์ž˜ ๋™์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” iBatis๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์œ„์น˜์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ๋งคํ•‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ˆœ์„œ์™€ SQL ์ฟผ๋ฆฌ์˜ ์œ„์น˜(?)๊ฐ€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆœ์„œ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ MyBatis์—์„œ๋Š” ๋ช…์‹œ์ ์ธ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด @Param ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ MyBatis๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” @Param ์–ด๋…ธํ…Œ์ด์…˜์„ ์ ์ ˆํ•˜๊ฒŒ ํ™œ์šฉํ•˜์—ฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๋‚˜์ค‘์— ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 




๋‹จ์ผ/๋‹ค์ค‘ ํŒŒ๋ผ๋ฉ”ํ„ฐ ๋ฐ”์ธ๋”ฉ

 

1. ๋‹จ์ผ ํŒŒ๋ผ๋ฉ”ํ„ฐ

String select(@Param("data")String data);

์˜ค๋ธŒ์ ํŠธ๋ฌธ์ด ํ•˜๋‚˜๋ผ๋ฉด ๊ทธ๋ƒฅ ๊ทธ ์•ˆ์˜ ๋ณ€์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
"select * from thistable where id = #{attributename1} and pw = #{attributename2}"


2. ๋‹ค์ค‘ ํŒŒ๋ผ๋ฉ”ํ„ฐ
String select(@Param("data")SampleDTO data, @Param("item")int a);

 

์–ด๋–ค ์˜ค๋ธŒ์ ํŠธ์ธ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•ด์•ผ ๋ฐ”์ธ๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ alias ๋ฅผ ์ฃผ์–ด์•ผ ํ•œ๋‹ค. 
"select * from thistable where id = #{data.attributename1} and pw = #{item}"