Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

MyBatis を利用した web application 開発についてのご紹介

9.320 Aufrufe

Veröffentlicht am

https://jjug.doorkeeper.jp/events/63161

Veröffentlicht in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

MyBatis を利用した web application 開発についてのご紹介

  1. 1. MyBatis を利利⽤用した Web Application 開発についてのご 紹介 LINE Corp. Service Dev. 1 Tokuhiro Matsuno
  2. 2. ⾃自⼰己紹介 • LINE Corp Service Dev.1 • ⾼高トラフィックの B2C の⾃自社ウェブサービスを開発する ことを⽣生業としている • 最近はなぜか広告事業をやっています。 • 広告案件でももちろん MyBatis を利利⽤用しています。
  3. 3. MyBatis? • 永続化フレームワーク for Java
  4. 4. どう動く? • SQL は直接書く • それを interface 通じて呼び出す → java.lang.reflect.Proxy で処理理する • 結果を Bean に Mapping する
  5. 5. どんなスキーマでも使える • 主キーがなくても⼤大丈夫 • もともと MyBatis 前提で設計されてない DB でも⼤大丈夫 • サブクエリなどの複雑なクエリも簡単に使えます • 複雑なクエリそのものが⼤大変
  6. 6. 完全に DB 製品に依 存します
  7. 7. 発⾏行行されるクエリが⼈人間 に読みやすいので便便利利
  8. 8. N+1 問題がそもそも起きない (⼿手で書いているので)
  9. 9. 3つの書き⽅方 • Mapper XML: XML で記述 • Annotation: アノテーションで記述 • Statement builder: Java DSL で記述
  10. 10. 1. Mapper XML
  11. 11. 名前はビーンのフィールド名または -parameters または @Param から取得
  12. 12. Java8 以後は -parameters オプションで不不要
  13. 13. Usage String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  14. 14. 実⾏行行 try (SqlSession session = sqlSessionFactory.openSession()) { BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.findById(101); System.out.println(blog); }
  15. 15. 2. Annotation
  16. 16. クエリ埋め込んだら読みづらい?
  17. 17. 3. Statement builder
  18. 18. LINE 社内での利利⽤用⽐比率 27% 73% XML Annotation Statement builder
  19. 19. @Select("SELECT *" + " FROM blog" + " id=#{id}") Blog findById(long id);
  20. 20. Annotation の⾔言語別シェア 1% 4% 95% Java Kotlin Groovy
  21. 21. Kotlin fun findById(id: Long): List<Blog> Groovy Blog findById(long id) Java Blog findById(long id);
  22. 22. LINE社社内での直近動向 • Mapper XML → 継続して利利⽤用されている • Annotation → Groovy or kotlin の利利⽤用が活発 • 複数⾏行行⽂文字列列に対応している • Statement builder → ほとんど利利⽤用されていない
  23. 23. Spring support • Spring boot のサポートが⼿手厚いです 😁
  24. 24. MyBatis の利利点 • SQL が直接書いてある → 短期的に開発効率がすごくいいわけではない → コードレビューが容易易 → スロークエリのリカバリが容易易
  25. 25. MyBatis の利利点(2) • ドキュメントが充実している
  26. 26. MyBatis の利利点(3)
  27. 27. MyBatis の利利点(4) • コードがシンプル • 挙動がわかりにくい点があっても、Debugger で追いやす い
  28. 28. MyBatis の⽋欠点 • XML, Statement builder, Annotation をサポート → Annotation で書く⼈人にとっては XML 記法前提で説明が 書かれていて、ドキュメントがちょっと読みにくい

×