SpringFramework 10. MyBatis - swkim0128/PARA GitHub Wiki


type: Spring archive: false

MyBatis ๊ฐœ์š”์™€ ํŠน์ง•


  • MyBatis๋Š” Java Object์™€ SQL ๋ฌธ ์ƒ์ด์˜ ์ž๋™ Mapping ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ORM Framework.

    https://blog.mybatis.org

    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์˜ ์ฃผ์š” Component


MyBatis3์˜ Mapper Interface


  • Mapper Interface

    Mapper Interface๋Š” mapping ํŒŒ์ผ์— ๊ธฐ์žฌ๋œ SQL์„ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ Interface.

    • Mapper Interface๋Š” SQL์„ ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ Type Safeํ•˜๊ฒŒ ๊ธฐ์ˆ ํ•˜๊ธฐ ์œ„ํ•ด MyBatis 3.x๋ถ€ํ„ฐ ๋“ฑ์žฅ.
    • Mapping ํŒŒ์ผ์— ์žˆ๋Š” SQL์„ java interface๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์คŒ
  • Mapper Interface๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ

    !Untitled 6 20.png

    !Untitled 7 17.png

MyBatis์™€ Spring์˜ ์—ฐ๋™


  • ๊ฐœ์š”

    MyBatis๋ฅผ Standalone ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, SqlSessionFactory ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉ

    ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— MyBatis ๊ด€๋ จ ๋นˆ์„ ๋“ฑ๋กํ•˜์—ฌ MyBatis๋ฅผ ์‚ฌ์šฉ

    ๋˜ํ•œ ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ

    MyBatis๋ฅผ ์Šคํ”„๋ง๊ณผ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” MyBatis์—์„œ ์ œ๊ณตํ•˜๋Š” Spring ์—ฐ๋™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”

    !Untitled 8 15.png

  • DataSource ์„ค์ •

    ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์Šคํ”„๋ง์—์„œ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ MyBatis ์„ค์ •ํŒŒ์ผ์—์„œ๋Š” ์ผ๋ถ€ ์„ค์ •์„ ์ƒ๋žต

    ์Šคํ”„๋ง ํ™˜๊ฒฝ ์„คํŽ‘ ์ž์ผ(application-context.xml)์— ๋ฐ์ดํ„ฐ์†Œ์Šค๋ฅผ ์„ค์ •

    ๋ฐ์ดํ„ฐ ์†Œ์Šค๋Š” dataSource ์•„์ด๋””๋ฅผ ๊ฐ€์ง„ ๋นˆ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด

    MyBatis์™€ ์Šคํ”„๋ง์„ ์—ฐ๋™ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •๊ณผ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋Š” ์Šคํ”„๋ง์—์„œ ๊ด€๋ฆฌ

    !Untitled 9 14.png

  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์ž ์„ค์ •

    transactionManager ์•„์ด๋””๋ฅผ ๊ฐ€์ง„ ๋นˆ์€ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด

    MyBatis๋Š” JDBC๋ฅผ ๊ทธ๋ž˜๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— DataSourceTransactionManager ํƒ€์ž…์˜ ๋นˆ์„ ์‚ฌ์šฉ

    tx:annotation-driven ์š”์†Œ๋Š” ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์„ ์–ธํ•˜๋„๋ก ์„ค์ •

    ์Šคํ”„๋ง์€ ๋ฉ”์†Œ๋“œ๋‚˜ ํด๋ž˜์Šค์— @Transactional์ด ์„ ์–ธ๋˜์–ด ์žˆ์œผ๋ฉด, AOP๋ฅผ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌ

    !Untitled 10 12.png

  • SqlSessionFactoryBean ์„ค์ •

    MyBatis ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ SqlSessionFactory๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ˆ˜ํ–‰

    ์Šคํ”„๋ง์—์„œ SqlSessionFactory ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SqlSessionFactoryBean์„ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์•ผ ํ•จ.

    SqlSeesionFactoryBean์„ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•  ๋•Œ, ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ mybatis ์„ค์ •ํŒŒ์ผ ์ •๋ณด๊ฐ€ ํ•„์š”

    !Untitled 11 10.png

  • mapper ๋นˆ ๋“ฑ๋ก

    mapper ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์Šค์บ๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ๋นˆ์œผ๋กœ ๋“ฑ๋ก.

    mapperSacnnerConfigurer์„ ์„ค์ •ํ•˜๋ฉด, Mapper ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋นˆ์œผ๋กœ ๋“ฑ๋ก

    • basePackage๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์ •ํ•˜๋ฉด, ํ•ด๋‹น ํŒจํ‚ค์ง€ ํ•˜์œ„์˜ ๋ชจ๋“  ๋งคํผ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ž๋™์œผ๋กœ ๋“ฑ๋ก

    MapperFactoryBean ํด๋ž˜์Šค๋Š” ๋งคํผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง์ ‘ ๋“ฑ๋กํ•  ๋•Œ ์‚ฌ์šฉ

    !Untitled 12 10.png

  • MyBatis Configuration ํŒŒ์ผ ์˜ˆ

    ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด DB ์ ‘์†์ •๋ณด ๋ฐ Mapper ๊ด€๋ จ ์„ค์ •์€ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ฝํ•˜์—ฌ ๊ด€๋ฆฌ

    ๋”ฐ๋ผ์„œ, MyBatis ํ™˜๊ฒฐ์„ค์ • ํŒŒ์ผ์—๋Š” ์Šคํ”„๋ง์—์„œ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋А ์ผ๋ถ€ ์ •๋ณด๋งŒ ์„ค์ •

    ์˜ˆ) typeAlias, typeHandler ๋“ฑ

    !Untitled 13 10.png

  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ฐ์ฒด ๊ตฌํ˜„

    ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ฐ์ฒด๋Š” ํŠน์ •ํ•œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด

    @Repository์€ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ฐ์ฒด๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜

    @Autowired ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด, ์‚ฌ์šฉํ•˜๋ ค๋Š” Mapper ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ฐ์ฒด์™€ ์˜์กด ๊ด€๊ณ„๋ฅผ ์„ค์ •

โš ๏ธ **GitHub.com Fallback** โš ๏ธ