SpringFramework 10. MyBatis - swkim0128/PARA GitHub Wiki
-
MyBatis๋ Java Object์ SQL ๋ฌธ ์์ด์ ์๋ Mapping ๊ธฐ๋ฅ์ ์ง์ํ๋ ORM Framework.
MyBatis๋ SQL์ ๋ณ๋์ ํ์ผ๋ก ๋ถ๋ฆฌํด์ ์ฒ๋ฆฌ
Object - SQL ์ฌ์ด์ parameter mapping์์ ์ ์๋์ผ๋ก ํด์ค
MyBatis๋ Hibernate๋ JPA(Java Persistence API)์ฒ๋ผ ์๋ก์ด DB ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ์ตํ์ผ ํ๋ ๋ถ๋ด์ด ์์ด, ๊ฐ๋ฐ์๊ฐ ์ต์ํ SQL์ ๊ทธ๋๋ก ์ด์ฉํ๋ฉด์ JDBC ์ฝ๋ ์์ฑ์ ๋ถํธํจ์ ์ ๊ฑฐํด ์ฃผ๊ณ , ๋๋ฉ์ธ ๊ฐ์ฒด๋ VO ๊ฐ์ฒด๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ์ด ๊ฐ๋ฅ
-
MyBatis ํน์ง
์ฌ์ด ์ ๊ทผ์ฑ๊ณผ ์ฝ๋์ ๊ฐ๊ฒฐํจ
- ๊ฐ์ฅ ๊ฐ๋จํ persistence framework
- XML ํํ๋ก ์์ ๋ JDBC ์ฝ๋๋ผ ์๊ฐํด๋ ๋ ๋งํผ JDBC์ ๋ชจ๋ ๊ธฐ๋ฅ์ MyBatis๊ฐ ๋๋ถ๋ถ ์ ๊ณต
- ๋ณต์กํ JDBC ์ฝ๋๋ฅผ ๊ฑท์ด๋ด๋ฉฐ ๊น๋ํ ์์ค์ฝ๋๋ฅผ ์ ์ง
- ์๋์ ์ธ parameter ์ค์ ๊ณผ Query ๊ฒฐ๊ณผ์ ๋ํ mapping ๊ตฌ๋ฌธ์ ์ ๊ฑฐ
SQL๋ฌธ๊ณผ ํ๋ก๊ทธ๋๋ฐ ์ฝ๋์ ๋ถ๋ฆฌ
- SQL์ ๋ณ๊ฒฝ์ด ์์ ๋๋ง๋ค ์๋ฐ ์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋ ์ปดํ์ผ ํ์ง ์์๋ ๋จ
- SQL ์์ฑ๊ณผ ๊ด๋ฆฌ ๋๋ ๊ฒํ ๋ฅผ DBA์ ๊ฐ์ ๊ฐ๋ฐ์๊ฐ ์๋ ๋ค๋ฅธ ์ด๋ง์๊ฒ ๋งก๊ธธ ์ ์์.
๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๊ตฌํ ๊ฐ๋ฅ
- Java, C#, .NET, Ruby, ...
-
MyBatis์ MyBatis-Spring์ ์ฌ์ฉํ DB Access Architecture.
-
MyBatis๋ฅผ ์ฌ์ฉํ๋ Data Access Layer
-
MyBatis 3์ ์ฃผ์ Component
-
MyBatis 3์ ์ฃผ์ Component์ ์ญํ
-
MyBatis-Spring์ ์ฃผ์ Component
-
MyBatis-Spring์ ์ฃผ์ Component์ ์ญํ
-
Mapper Interface
Mapper Interface๋ mapping ํ์ผ์ ๊ธฐ์ฌ๋ SQL์ ํธ์ถํ๊ธฐ ์ํ Interface.
- Mapper Interface๋ SQL์ ํธ์ถํ๋ ํ๋ก๊ทธ๋จ์ Type Safeํ๊ฒ ๊ธฐ์ ํ๊ธฐ ์ํด MyBatis 3.x๋ถํฐ ๋ฑ์ฅ.
- Mapping ํ์ผ์ ์๋ SQL์ java interface๋ฅผ ํตํด ํธ์ถํ ์ ์๋๋ก ํด ์ค
-
Mapper Interface๋ฅผ ์ฌ์ฉํ์ง ์์์ ๊ฒฝ์ฐ
-
๊ฐ์
MyBatis๋ฅผ Standalone ํํ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, SqlSessionFactory ๊ฐ์ฒด๋ฅผ ์ง์ ์ฌ์ฉ
์คํ๋ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์คํ๋ง ์ปจํ ์ด๋์ MyBatis ๊ด๋ จ ๋น์ ๋ฑ๋กํ์ฌ MyBatis๋ฅผ ์ฌ์ฉ
๋ํ ์คํ๋ง์์ ์ ๊ณตํ๋ ํธ๋์ญ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์์ฝ๊ฒ ํธ๋์ญ์ ์ฒ๋ฆฌ
MyBatis๋ฅผ ์คํ๋ง๊ณผ ์ฐ๋ํ๊ธฐ ์ํด์๋ MyBatis์์ ์ ๊ณตํ๋ Spring ์ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์
-
DataSource ์ค์
์คํ๋ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์คํ๋ง์์ ๋ฐ์ดํฐ ์์ค๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก MyBatis ์ค์ ํ์ผ์์๋ ์ผ๋ถ ์ค์ ์ ์๋ต
์คํ๋ง ํ๊ฒฝ ์คํ ์์ผ(application-context.xml)์ ๋ฐ์ดํฐ์์ค๋ฅผ ์ค์
๋ฐ์ดํฐ ์์ค๋ dataSource ์์ด๋๋ฅผ ๊ฐ์ง ๋น์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ๊ฐ์ง ๊ฐ์ฒด
MyBatis์ ์คํ๋ง์ ์ฐ๋ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ ๊ณผ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ ์คํ๋ง์์ ๊ด๋ฆฌ
-
ํธ๋์ญ์ ๊ด๋ฆฌ์ ์ค์
transactionManager ์์ด๋๋ฅผ ๊ฐ์ง ๋น์ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
MyBatis๋ JDBC๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ DataSourceTransactionManager ํ์ ์ ๋น์ ์ฌ์ฉ
tx:annotation-driven ์์๋ ํธ๋์ญ์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ์ด๋ ธํ ์ด์ ์ผ๋ก ์ ์ธํ๋๋ก ์ค์
์คํ๋ง์ ๋ฉ์๋๋ ํด๋์ค์ @Transactional์ด ์ ์ธ๋์ด ์์ผ๋ฉด, AOP๋ฅผ ํตํด ํธ๋์ญ์ ์ ์ฒ๋ฆฌ
-
SqlSessionFactoryBean ์ค์
MyBatis ์ ํ๋ฆฌ์ผ์ด์ ์ SqlSessionFactory๋ฅผ ์ค์ฌ์ผ๋ก ์ํ
์คํ๋ง์์ SqlSessionFactory ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ SqlSessionFactoryBean์ ๋น์ผ๋ก ๋ฑ๋กํด์ผ ํจ.
SqlSeesionFactoryBean์ ๋น์ผ๋ก ๋ฑ๋กํ ๋, ์ฌ์ฉํ ๋ฐ์ดํฐ ์์ค์ mybatis ์ค์ ํ์ผ ์ ๋ณด๊ฐ ํ์
-
mapper ๋น ๋ฑ๋ก
mapper ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ค์บ๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ๋ฑ๋กํ๊ฑฐ๋, ์ง์ ๋น์ผ๋ก ๋ฑ๋ก.
mapperSacnnerConfigurer์ ์ค์ ํ๋ฉด, Mapper ์ธํฐํ์ด์ค๋ฅผ ์๋์ผ๋ก ๊ฒ์ํ์ฌ ๋น์ผ๋ก ๋ฑ๋ก
- basePackage๋ก ํจํค์ง๋ฅผ ์ค์ ํ๋ฉด, ํด๋น ํจํค์ง ํ์์ ๋ชจ๋ ๋งคํผ ์ธํฐํ์ด์ค๊ฐ ์๋์ผ๋ก ๋ฑ๋ก
MapperFactoryBean ํด๋์ค๋ ๋งคํผ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ๋ฑ๋กํ ๋ ์ฌ์ฉ
-
MyBatis Configuration ํ์ผ ์
์คํ๋ง์ ์ฌ์ฉํ๋ฉด DB ์ ์์ ๋ณด ๋ฐ Mapper ๊ด๋ จ ์ค์ ์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ฝํ์ฌ ๊ด๋ฆฌ
๋ฐ๋ผ์, MyBatis ํ๊ฒฐ์ค์ ํ์ผ์๋ ์คํ๋ง์์ ๊ด๋ฆฌํ์ง ์๋ ์ผ๋ถ ์ ๋ณด๋ง ์ค์
์) typeAlias, typeHandler ๋ฑ
-
๋ฐ์ดํฐ ์ ๊ทผ ๊ฐ์ฒด ๊ตฌํ
๋ฐ์ดํฐ ์ ๊ทผ ๊ฐ์ฒด๋ ํน์ ํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ์ฅ์์ ์ ๊ทผํ๋ ๋ฐฉ์์ ๊ตฌํํ ๊ฐ์ฒด
@Repository์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ฐ์ฒด๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์คํ๋ง์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์
@Autowired ์ด๋ ธํ ์ด์ ์ ํตํด, ์ฌ์ฉํ๋ ค๋ Mapper ์ธํฐํ์ด์ค๋ฅผ ๋ฐ์ดํฐ ์ ๊ทผ ๊ฐ์ฒด์ ์์กด ๊ด๊ณ๋ฅผ ์ค์