๐ Mybatis
- ์ฟผ๋ฆฌ๋ฌธ๋ง ์ ์ผ๋ฉด ์์์ DB์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ค๋ ํ๋ ์์ํฌ
- ๊ฑฐ์ ๋ชจ๋ jdbc๊ด๋ จ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํด์ค๋ค
- ๊ฐ๋ฐ์๋ ์ฌ์ฉํ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ์ข
๋ฅ๋ง ์ ํํ๋ฉด ๋๋ค
๐ผ ํ์ํ ์์กด์ฑ๋ค
- mybatis
- mybatis-spring
- spring-jdbc
๐ผ ์์กด์ฑ ์ฃผ์
ํ๊ธฐ
- ์ ๋งํฌ์์ Maven์ ๋ณต์ฌํ์ฌ pom.xml์ ๋ถ์ฌ ๋ฃ๊ธฐ
๐ผ ์ ์ฉ ์์
- DBCP๋ก DataSource ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค (HikariDataSource)
- ์์ฑํ DataSource ๊ฐ์ฒด๋ฅผ ์ ๋ฌํด SqlSessionFactoryBean ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค
(์ปจํ
์คํธ ์์ ์์ฑํ sqlSessionFactory๊ฐ ์์ผ๋ฉด mybatis๊ฐ ์์์ ํ์ํ ๋ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๋ค)
<bean id="hikariDataSource" class="com.zaxxer.hikari.HikariDataSource">
<constructor-arg ref="hikariConfig"></constructor-arg>
</bean>
-
root-context์ Namespace์์ mybatis ์ฒดํฌ(์ฌ๊ธฐ์ ์ฒดํฌํ๋ฉด ์ํฌํธํ๋๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๊ฐ ์๋ค, ์ง์ ์ํฌํธํด๋๋๊ณ ์ฌ๊ธฐ์ ์ฒดํฌํด๋๋จ)
-
mybatis-spring:scan ๊ธฐ๋ฅ์ ํตํด ํจํค์ง์ ์์น๋ฅผ ์ง์ ํ๋ค
<mybatis-spring:scan base-package="com.ezen.springdatabase.mapper"/>
๐ Mapper
- Mybatis์ Mapper ์ธํฐํ์ด์ค๋ฅผ ๋ฑ๋กํ๋ฉด ํด๋น Mapper์ ์ ๋ณด๋ฅผ ํตํด ์๋์ผ๋ก ๋ฉ์๋๋ฅผ ์์ฑํด์ค๋ค (๋ด๊ฐ ์ค์ ํด์ผํ๋ ๊ฒ : ๋ฆฌํด ํ์
, ์ฟผ๋ฆฌ๋ฌธ, ์ฟผ๋ฆฌ๋ฌธ ํ์
)
- ์ด๋
ธํ
์ด์
๋ฐฉ์์ Mapper์ XML๋ฐฉ์์ Mapper๊ฐ ์๋ค
๐ผ ์ด๋
ธํ
์ด์
๋ฐฉ์ Mapper
๐ฑ ์ด๋
ธํ
์ด์
์ข
๋ฅ
- @Select(query)
- @Insert(query)
- @Delete(query)
- @Update(query)
๐ฑ ์ฌ์ฉ๋ฐฉ๋ฒ
- @Select๋ก ์กฐํํ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ํ์ธ๊ฒฝ์ฐ List ํ์
์ผ๋ก ๋ฆฌํดํด์ค๋ค
- @Select๋ก ์กฐํํ๋ ๋ฐ์ดํฐ๊ฐ ํ ํ์ธ ๊ฒฝ์ฐ ํด๋น DTO ํ์
์ผ๋ก ๋ฆฌํดํด์ค๋ค
- ์ฟผ๋ฆฌ๋ฌธ์ ํ๋ผ๋ฏธํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ #{name}๋ก ์ฌ์ฉํ๊ณ @Param("name")์ผ๋ก ์ง์ ํด์ค๋ค
- @Insert, @Update, @Delete๋ ์
๋ฐ์ดํธ ๋ ํ์ ๋ฆฌํดํ๋ฏ๋ก ์ ์ ํ์
์ผ๋ก ๋ฆฌํดํด์ค๋ค
- @Insert, @Update์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋ฐ๋น ๋ฐ์ดํฐ ํด๋์ค ํ์(DTO)์ผ๋ก ๋๊ธฐ๋ฉด ํ๋ผ๋ฏธํฐ์ #{property}๋ฅผ ์ฌ์ฉํ ์ ์๋ค
๐ XML ๋ฐฉ์ Mapper
๐ผ ์ฌ์ฉ๋ฐฉ๋ฒ
- Mapper Interface๋ฅผ ์์ฑํ๋ค(๋ฉ์๋๋ง ์ ์ํ๊ณ ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ง ์๋๋ค)
- resources ๋ฐ์ ํด๋น Mapper๊ฐ ์ํ ํจํค์ง์ ๊ฒฝ๋ก๋๋ก ํด๋๋ฅผ ์์ฑํ๋ค(ํด๋๋ฅผ ํ๋์ฉ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค)
- ํด๋น ํด๋์ ๊ฐ์ ์ด๋ฆ์ Mapper.xml์ ์์ฑํ๋ค
- xml์ ํ์์ mybatis์ ๊ณต์ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ๋ค
๐ mybatis_๊ณต์ํ์ด์ง ๋ฐ๋ก๊ฐ๊ธฐ