๋๋ฌด ํํ๊ฒ ๋ง๋ ์ ์๋ค.
์ด๋ฒ ๊ธ์์๋ ๋ง์ด๋ฐํฐ์ค(MyBatis)๋ฅผ ์ฌ์ฉํ๋ค๊ฐ ํ ๋ฒ์ฏค์ ๋ง๋ ์ ์๋ org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) ์๋ฌ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณธ๋ค.
ํ๋์ฉ ์ดํด๋ณด๋ฉด์ ์์ ์ ํ๋ก์ ํธ ์ค์ ์ ์ ๊ฒํด๋ณด์.
์ ๋ฐ์ํ ๊น?
์๋ ๋์ด๋ ๋ด์ฉ ์ธ์์ ๋ฐ๊ฒฌํ ์ผ์ด์ค๊ฐ ์๋ค๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ค๋ฅธ ๋ถ๋ค๊ป ๋์ ๋ ๊ฒ ๊ฐ์ต๋๋ค :)
Mapper ์ธํฐํ์ด์ค์ XML์ ์คํ
๊ธฐ๋ณธ์ ์ผ๋ก Mapper ์ธํฐํ์ด์ค์ XML์ ์คํ๊ฐ ์๋์ง ํ์ธํด๋ณด์.
<select> ๋ฌธ ๋ฑ์ ์ ์ธํ๋ id์ ์คํ๊ฐ ์์ ์๋ ์๊ณ , ์ ์ธ๋์ด ์๋ id๊ฐ Mapper ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ช
๊ณผ ๋ค๋ฅธ์ง ํ์ธํด๋ณด์.
์ธํฐํ์ด์ค์ ์ด๋ฆ๊ณผ XML ํ์ผ์ ์ ์ธ๋ ์ด๋ฆ์ด ๋ฌ๋ผ์ ์๊ธธ ์๋ ์๋ค.
์๋์ ๊ฐ์ด IDE์์ ์ฝ๊ฒ ๋ฐ๊ฒฌํ๊ธฐ ์ด๋ ค์ด ๊ณต๋ฐฑ์ด ์จ์ด์๋ ๊ฒฝ์ฐ๋ ์๋ค.
<!-- id์ ๊ณต๋ฐฑ์ด ์๋ค. -->
<select id="select " resultTYpe="String">
...
</select>
mapper-locations
์ฟผ๋ฆฌ๊ฐ ์์ฑ๋์ด ์๋ mapper XML์ด ์์นํ ๊ฒฝ๋ก๋ฅผ application.properties์ ์ ์ํ์ง ์์์ ๋๋ ์๋ชป ์ ์ธ๋ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ค.
์ ํํ ๊ฒฝ๋ก๋ ํ๋ก์ ํธ์ ๋ฐ๋ผ ๋ณ๊ฒฝํด ์ฃผ๋ฉด ๋๋ค.
mybatis.mapper-locations:classpath:mapper/*.xml
๋์ผํ ์ด๋ฆ, ๋ค๋ฅธ ํจํค์ง ๊ฒฝ๋ก
Mapper์ ์ด๋ฆ์ด ๊ฐ์ง๋ง ํจํค์ง ์ด๋ฆ์ด ๋ฌ๋ผ์ ์ธํ ๋ฆฌ์ ์ด๋ ์ดํด๋ฆฝ์ค์์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋ ๊ฒฝ์ฐ๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ ์ง์ ํ์ธํด๋ด์ผ ํ๋ค.
yaml ํ์ผ ์คํ
์ค์ ํ์ผ์ properties๊ฐ ์๋ yaml ํ์ผ์ ์์ฑํ ์๋ ์๋ค. ๊ณ์ธต ๊ตฌ์กฐ์ฌ์ ๊ฐ๋
์ฑ์ด ๋ณด๋ค ๋ ์ข์ ์ฅ์ ์ ๊ฐ๋๋ค.
๋ค๋ง ์์ฑ๋ฒ์ ์ต์ํ์ง ์์ ๊ฒฝ์ฐ ๋ค์ฌ ์ฐ๊ธฐ๋ฅผ ์๋ชป ์ ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์ต์๋จ์ ์ ์ธ๋ spring ํ์์ ์์นํ๋ ๊ฒ์ด ์๋๋ผ ์ต์๋จ์ mybatis๊ฐ ์์นํด์ผ ํ๋ค.
์ค์ ํ์ผ ๋ด์์ ์๋ชป๋ ๋ค์ฌ ์ฐ๊ธฐ๋ก ๋ค๋ฅธ ์ค์ ๊ฐ์ด ์ ์์ ์ผ๋ก ์ฝํ์ง ์์ ์ ์์ผ๋ฏ๋ก ํ์ธํด๋ณด์.
DataSource Configuration
DataSource๋ฅผ ์ค์ ํ๋ Configuration ํด๋์ค๋ฅผ ์ ๊ฒํ ํ์๊ฐ ์๋ค.
SessionFactory๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ setMapperLocations ๋ฉ์๋ ๋ฑ์ผ๋ก Mapper XML์ ์์น๋ฅผ ์ ์ธํ ํ
๋ฐ, ์๋ํ ๋๋ก ์ ์ค์ ๋์ด
์๋์ง ํ์ธํด๋ณด์. @MapperScan์ด ์ ์ธ๋ ๊ฒฝ์ฐ์๋ Mapper ์ธํฐํ์ด์ค๊ฐ ์๋ ์์น์ ์ผ์นํ์ง ํ์ธํด๋ณด์.