SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
MyBatis を利利⽤用した Web
Application 開発についてのご
紹介
LINE Corp. Service Dev. 1

Tokuhiro Matsuno
⾃自⼰己紹介
• LINE Corp Service Dev.1

• ⾼高トラフィックの B2C の⾃自社ウェブサービスを開発する
ことを⽣生業としている

• 最近はなぜか広告事業をやっています。

• 広告案件でももちろん MyBatis を利利⽤用しています。
MyBatis?
• 永続化フレームワーク for Java
どう動く?
• SQL は直接書く

• それを interface 通じて呼び出す

→ java.lang.reflect.Proxy で処理理する

• 結果を Bean に Mapping する
どんなスキーマでも使える
• 主キーがなくても⼤大丈夫

• もともと MyBatis 前提で設計されてない DB でも⼤大丈夫

• サブクエリなどの複雑なクエリも簡単に使えます

• 複雑なクエリそのものが⼤大変
完全に DB 製品に依
存します
発⾏行行されるクエリが⼈人間
に読みやすいので便便利利
N+1 問題がそもそも起きない
(⼿手で書いているので)
3つの書き⽅方
• Mapper XML: XML で記述

• Annotation: アノテーションで記述

• Statement builder: Java DSL で記述
1. Mapper XML
名前はビーンのフィールド名または -parameters または @Param から取得
Java8 以後は -parameters オプションで不不要
Usage
String resource = "mybatis-config.xml";

InputStream inputStream =
Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new
SqlSessionFactoryBuilder().build(inputStream);
実⾏行行
try (SqlSession session = sqlSessionFactory.openSession())
{

BlogMapper mapper =
session.getMapper(BlogMapper.class);

Blog blog = mapper.findById(101);

System.out.println(blog);

}
2. Annotation
クエリ埋め込んだら読みづらい?
3. Statement builder
LINE 社内での利利⽤用⽐比率
27%
73%
XML Annotation
Statement builder
@Select("SELECT *"
+ " FROM blog"
+ " id=#{id}")
Blog findById(long id);
Annotation の⾔言語別シェア
1%
4%
95%
Java Kotlin Groovy
Kotlin
fun findById(id: Long): List<Blog>
Groovy
Blog findById(long id)
Java
Blog findById(long id);
LINE社社内での直近動向
• Mapper XML → 継続して利利⽤用されている

• Annotation → Groovy or kotlin の利利⽤用が活発

• 複数⾏行行⽂文字列列に対応している

• Statement builder → ほとんど利利⽤用されていない
Spring support
• Spring boot のサポートが⼿手厚いです 😁
MyBatis の利利点
• SQL が直接書いてある

→ 短期的に開発効率がすごくいいわけではない

→ コードレビューが容易易

→ スロークエリのリカバリが容易易
MyBatis の利利点(2)
• ドキュメントが充実している
MyBatis の利利点(3)
MyBatis の利利点(4)
• コードがシンプル

• 挙動がわかりにくい点があっても、Debugger で追いやす
い
MyBatis の⽋欠点
• XML, Statement builder, Annotation をサポート

→ Annotation で書く⼈人にとっては XML 記法前提で説明が
書かれていて、ドキュメントがちょっと読みにくい

Contenu connexe

Tendances

5分で分かるmonaca pressproject(草案)
5分で分かるmonaca pressproject(草案)5分で分かるmonaca pressproject(草案)
5分で分かるmonaca pressproject(草案)
Yuki Okamoto
 

Tendances (20)

YARAIYA! Opendata with WordPress
YARAIYA!  Opendata with WordPressYARAIYA!  Opendata with WordPress
YARAIYA! Opendata with WordPress
 
我が家のフロントエンド開発事情
我が家のフロントエンド開発事情我が家のフロントエンド開発事情
我が家のフロントエンド開発事情
 
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーションこれから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
 
WordPress APIで作るモバイルアプリ
WordPress APIで作るモバイルアプリWordPress APIで作るモバイルアプリ
WordPress APIで作るモバイルアプリ
 
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App InventorHands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App Inventor
 
Viewを使って開発を楽にする話
Viewを使って開発を楽にする話Viewを使って開発を楽にする話
Viewを使って開発を楽にする話
 
WorcCamp Kansai 2015 LT大会
WorcCamp Kansai 2015 LT大会WorcCamp Kansai 2015 LT大会
WorcCamp Kansai 2015 LT大会
 
WP-APIを使ってみよう&No PHPテーマという考え方
WP-APIを使ってみよう&No PHPテーマという考え方WP-APIを使ってみよう&No PHPテーマという考え方
WP-APIを使ってみよう&No PHPテーマという考え方
 
Word pressはじめの一歩 テーマ作成ハンズオン
Word pressはじめの一歩 テーマ作成ハンズオンWord pressはじめの一歩 テーマ作成ハンズオン
Word pressはじめの一歩 テーマ作成ハンズオン
 
WordPress開発の最新事情
WordPress開発の最新事情WordPress開発の最新事情
WordPress開発の最新事情
 
WordCamp Kansai 2015 ハンズオン - 踏み出してみよう!翻訳の第一歩 #wck2015
WordCamp Kansai 2015 ハンズオン - 踏み出してみよう!翻訳の第一歩 #wck2015WordCamp Kansai 2015 ハンズオン - 踏み出してみよう!翻訳の第一歩 #wck2015
WordCamp Kansai 2015 ハンズオン - 踏み出してみよう!翻訳の第一歩 #wck2015
 
5分で分かるmonaca pressproject(草案)
5分で分かるmonaca pressproject(草案)5分で分かるmonaca pressproject(草案)
5分で分かるmonaca pressproject(草案)
 
WordCamp Kansai 2015 - 京都大学における WordPress を利用した多言語情報発信と管理運用 #wck2015
WordCamp Kansai 2015 - 京都大学における WordPress を利用した多言語情報発信と管理運用 #wck2015WordCamp Kansai 2015 - 京都大学における WordPress を利用した多言語情報発信と管理運用 #wck2015
WordCamp Kansai 2015 - 京都大学における WordPress を利用した多言語情報発信と管理運用 #wck2015
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
 
WordPressで行うシステム開発 WordCamp Tokyo 2015用
WordPressで行うシステム開発 WordCamp Tokyo 2015用WordPressで行うシステム開発 WordCamp Tokyo 2015用
WordPressで行うシステム開発 WordCamp Tokyo 2015用
 
中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術
 
WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編
 
オフライン行動を支えるメール配送管理 at サイタ
オフライン行動を支えるメール配送管理 at サイタオフライン行動を支えるメール配送管理 at サイタ
オフライン行動を支えるメール配送管理 at サイタ
 
Media Assembly Kit
Media Assembly KitMedia Assembly Kit
Media Assembly Kit
 
[社内勉強会]SPAのすすめ
[社内勉強会]SPAのすすめ[社内勉強会]SPAのすすめ
[社内勉強会]SPAのすすめ
 

En vedette

ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立てユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
Ryosuke Uchitate
 

En vedette (11)

Reladomo入門 JJUGナイトセミナー #jjug
Reladomo入門 JJUGナイトセミナー #jjugReladomo入門 JJUGナイトセミナー #jjug
Reladomo入門 JJUGナイトセミナー #jjug
 
Doma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみDoma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみ
 
ドキュメントを直し続ける話 #kbkz_tech
ドキュメントを直し続ける話 #kbkz_techドキュメントを直し続ける話 #kbkz_tech
ドキュメントを直し続ける話 #kbkz_tech
 
CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性
CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性
CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性
 
ITトレンドに見る日本のエンタープライズITについて
ITトレンドに見る日本のエンタープライズITについてITトレンドに見る日本のエンタープライズITについて
ITトレンドに見る日本のエンタープライズITについて
 
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立てユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
 
JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座
 
Selenide or Geb 〜あなたはその時どちらを使う〜
Selenide or Geb 〜あなたはその時どちらを使う〜Selenide or Geb 〜あなたはその時どちらを使う〜
Selenide or Geb 〜あなたはその時どちらを使う〜
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 

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

これからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れこれからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れ
Mitsuru Katoh
 
クラウドAPIを利用した開発について ~ セルフポータル、ストレージサービス、Infrastructure as a code ~
クラウドAPIを利用した開発について ~ セルフポータル、ストレージサービス、Infrastructure as a code ~クラウドAPIを利用した開発について ~ セルフポータル、ストレージサービス、Infrastructure as a code ~
クラウドAPIを利用した開発について ~ セルフポータル、ストレージサービス、Infrastructure as a code ~
Kimihiko Kitase
 
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
naoki ando
 

Similaire à MyBatis を利用した web application 開発についてのご紹介 (20)

サーバ・VM+コンテナ管理Tips@オンライン合宿2020
サーバ・VM+コンテナ管理Tips@オンライン合宿2020サーバ・VM+コンテナ管理Tips@オンライン合宿2020
サーバ・VM+コンテナ管理Tips@オンライン合宿2020
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
 
これからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れこれからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れ
 
自社サービスkintoneをふんだんに活用したサイボウズの開発フロー
自社サービスkintoneをふんだんに活用したサイボウズの開発フロー自社サービスkintoneをふんだんに活用したサイボウズの開発フロー
自社サービスkintoneをふんだんに活用したサイボウズの開発フロー
 
ブラウザだけで学ぶWebアプリ開発【デザイン編】
ブラウザだけで学ぶWebアプリ開発【デザイン編】ブラウザだけで学ぶWebアプリ開発【デザイン編】
ブラウザだけで学ぶWebアプリ開発【デザイン編】
 
プロトタイピングでしあわせになろうよ
プロトタイピングでしあわせになろうよプロトタイピングでしあわせになろうよ
プロトタイピングでしあわせになろうよ
 
Hello, React!! まで導く Reactの基礎
Hello, React!! まで導く Reactの基礎Hello, React!! まで導く Reactの基礎
Hello, React!! まで導く Reactの基礎
 
遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetup遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetup
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ
 
Webmarketing_CareerBar_ver1.pdf
Webmarketing_CareerBar_ver1.pdfWebmarketing_CareerBar_ver1.pdf
Webmarketing_CareerBar_ver1.pdf
 
Riot.jsを用いたweb開発 takusuta tech conf #1
Riot.jsを用いたweb開発   takusuta tech conf #1Riot.jsを用いたweb開発   takusuta tech conf #1
Riot.jsを用いたweb開発 takusuta tech conf #1
 
2023.03.08@高まるウェブアクセシビリティの需要ーfreee×ニューズピックスー〜フロントエンド最前線〜
2023.03.08@高まるウェブアクセシビリティの需要ーfreee×ニューズピックスー〜フロントエンド最前線〜2023.03.08@高まるウェブアクセシビリティの需要ーfreee×ニューズピックスー〜フロントエンド最前線〜
2023.03.08@高まるウェブアクセシビリティの需要ーfreee×ニューズピックスー〜フロントエンド最前線〜
 
Static Web AppsとBlazor WebAssemblyのすすめ
Static Web AppsとBlazor  WebAssemblyのすすめStatic Web AppsとBlazor  WebAssemblyのすすめ
Static Web AppsとBlazor WebAssemblyのすすめ
 
クラウドAPIを利用した開発について ~ セルフポータル、ストレージサービス、Infrastructure as a code ~
クラウドAPIを利用した開発について ~ セルフポータル、ストレージサービス、Infrastructure as a code ~クラウドAPIを利用した開発について ~ セルフポータル、ストレージサービス、Infrastructure as a code ~
クラウドAPIを利用した開発について ~ セルフポータル、ストレージサービス、Infrastructure as a code ~
 
小さく早い改善がスマホのサービス開発を変える
小さく早い改善がスマホのサービス開発を変える小さく早い改善がスマホのサービス開発を変える
小さく早い改善がスマホのサービス開発を変える
 
障害にならないためのMySQL運用
障害にならないためのMySQL運用障害にならないためのMySQL運用
障害にならないためのMySQL運用
 
Transactd ~高速・高機能なNoSQLプラグイン for MySQL/MariaDB~
Transactd ~高速・高機能なNoSQLプラグイン for MySQL/MariaDB~Transactd ~高速・高機能なNoSQLプラグイン for MySQL/MariaDB~
Transactd ~高速・高機能なNoSQLプラグイン for MySQL/MariaDB~
 
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
 
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
 
Emacs softLayer
Emacs softLayerEmacs softLayer
Emacs softLayer
 

Plus de Tokuhiro Matsuno

最近のPerlバイナリマネージャー Perl 編
最近のPerlバイナリマネージャー Perl 編最近のPerlバイナリマネージャー Perl 編
最近のPerlバイナリマネージャー Perl 編
Tokuhiro Matsuno
 
Server::Starter meets Java
Server::Starter meets JavaServer::Starter meets Java
Server::Starter meets Java
Tokuhiro Matsuno
 
MySQL のチューニングについて考えてみた
MySQL のチューニングについて考えてみたMySQL のチューニングについて考えてみた
MySQL のチューニングについて考えてみた
Tokuhiro Matsuno
 

Plus de Tokuhiro Matsuno (20)

20190126 yapc tokyo keynote
20190126 yapc tokyo keynote 20190126 yapc tokyo keynote
20190126 yapc tokyo keynote
 
最近のPerlバイナリマネージャー Perl 編
最近のPerlバイナリマネージャー Perl 編最近のPerlバイナリマネージャー Perl 編
最近のPerlバイナリマネージャー Perl 編
 
Plenv and perl build, and search.cpan.org
Plenv and perl build, and search.cpan.orgPlenv and perl build, and search.cpan.org
Plenv and perl build, and search.cpan.org
 
Yapc fukuoka crust
Yapc fukuoka crustYapc fukuoka crust
Yapc fukuoka crust
 
Perl6 と web 開発と
Perl6 と web 開発とPerl6 と web 開発と
Perl6 と web 開発と
 
Openjdk 入門してみた話
Openjdk 入門してみた話Openjdk 入門してみた話
Openjdk 入門してみた話
 
promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...
promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...
promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...
 
Perl6 web-app
Perl6 web-appPerl6 web-app
Perl6 web-app
 
Perl6 meets JVM
Perl6 meets JVMPerl6 meets JVM
Perl6 meets JVM
 
Server::Starter meets Java
Server::Starter meets JavaServer::Starter meets Java
Server::Starter meets Java
 
Java web application testing
Java web application testingJava web application testing
Java web application testing
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
Test::Kantan - Perl and Testing
Test::Kantan - Perl and TestingTest::Kantan - Perl and Testing
Test::Kantan - Perl and Testing
 
[jjug] Java と Benchmark
[jjug] Java と Benchmark[jjug] Java と Benchmark
[jjug] Java と Benchmark
 
Devel::NYTProf::Apache
Devel::NYTProf::ApacheDevel::NYTProf::Apache
Devel::NYTProf::Apache
 
MySQL のチューニングについて考えてみた
MySQL のチューニングについて考えてみたMySQL のチューニングについて考えてみた
MySQL のチューニングについて考えてみた
 
Archer
ArcherArcher
Archer
 
MySQL::NameLocker
MySQL::NameLockerMySQL::NameLocker
MySQL::NameLocker
 
Inside MF
Inside MFInside MF
Inside MF
 
Web Application FLow
Web Application FLowWeb Application FLow
Web Application FLow
 

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