SlideShare a Scribd company logo
1 of 19
Download to read offline
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18(土)
DE-TEIU(@de_teiu_tkg)
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18
自己紹介
名前 : DE-TEIU(Twitter(新𝕏): @de_teiu_tkg)
趣味 : クソアプリ開発、麻雀
サイト: Uselesscode
最近作ったもの:サ麻雀ボ
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 2
Javaでアプリ作ってる時...
DBアクセスどうやってます??
JDBC
ORマッパー
主にこの2つかな?
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 3
JDBC
DBとのコネクション確立、SQLの実行、コミット、切断まで全部自
分で注意して実装しないといけない
SQLの実行結果をエンティティに詰め直すのが面倒
これは結構大変。あまりやりたくない
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 4
ORマッパー
(超ざっくり) 2種類に分けられる。
1. DBとのコネクションの管理や、エンティティの詰め直しとかをや
ってくれる。実行させるSQLは自分で用意するタイプ
2. SQLすらも自分で書かなくて良いタイプ
(厳密にはJDBCラッパー、SQLマッパー、クエリビルダー、(狭義)OR
マッパー、みたいな分かれ方をするとか)
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 5
SQLを自分で書くタイプ
ちなみに後で紹介するMyBatisはこれに該当する。
メリット
SQLさえ書ければどうとでも実装できる。チューニングもやり放題
デメリット
SQLを用意するのが面倒
ちょっと油断すると似たようなSQLを大量生産することになる
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 6
SQLを自分で書かないタイプ
メリット
そのORマッパーの仕様に則った書き方で、Javaのメソッドを呼ぶ
だけでSQLを実行できる
簡単なCRUDだったら一瞬で実装できる
SQLを書いたことが無くても(一応)使える
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 7
SQLを自分で書かないタイプ
デメリット
複雑なSQLを実行しようとすると大変(結合するとか集計するとか)
下手に実装すると気づかぬうちにN+1問題が発生することも
チューニングもやりにくい
そのORマッパー固有の書き方とかを覚える必要あり
元々SQLを書ける人にとっては、かえってやりにくい説
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 8
結局どっちが良いの
個人的にはSQLを自分で書くタイプのORマッパーの方が好み。
SQLの書き方を学んでおいた方が色んな所で応用が効く
ソースコードからSQLの部分だけ引っこ抜いてDBクライアントに貼
り付けて実行、とかもできる
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 9
ということで、MyBatisの話
XMLファイルにSQLを記述するタイプのORマッパー。
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 10
XMLに対応するMapperインタフェースを定義しておけば、いい感じ
にマッピングしてくれる
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 11
SQLはある程度動的に生成させられる。例えばこう
Java側のロジックからパラメータとして渡された"title"が
nullじゃない時のみ、Where句に AND title like 'title' の条件が追加さ
れる
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 12
デメリット
XMLなので一部の記号はちゃんとエスケープしないといけない
">" → ">"
"<" → "&lt;"
など。あとSQLを<![CDATA[]]> で囲う手もある。
似たようなSQLが大量生産されがち
チームで中長期的にアプリを改修していくと、いつの間にかほぼ同
じ内容のSQLが色んな箇所に実装されてしまったりする
(これは開発体制の問題でもあるが)
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 13
デメリット
単純なCRUD文まで全部自力で用意しないといけない。
ただのINSERT文とか、主キーを指定して1件取ってくるだけのよく
あるSELECT文とか。めんどくさい。
対策
MyBatis Generatorを使ってみよう。
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 14
MyBatis Generatorとは
MyBatisでDBアクセスする際に必要な以下の部品を、DBスキーマの
テーブル定義から自動生成してくれるツール。
Mapperインタフェース(Java)
Entityクラス(Java)
Mapper(Xml)
これらの部品の中には、各テーブルに対する基本的なCRUDを行う処
理が丸ごと入っている
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 15
ということでデモをやる
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 16
MyBatis Generatorを使うメリット
SQLを書く作業が減る
Where句をある程度動的に設定できるため、似たようなSQLの大量
発生を多少防げる
自前でSQLを書いても良い
SQLを書く/書かないタイプのORマッパーの良いとこ取りができる!
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 17
まとめ
ORマッパーにはSQLを書くタイプと書かないタイプがある
MyBatisはSQLを書くタイプ
しかしMyBatis Generatorを使うと必要最低限のSQLを自動生成で
きる
あとおすすめのORマッパーがあったらぜひ教えてください
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 18
参考文献
Java ORマッパー選定のポイント #jsug | ドクセル
MyBatis Generatorの導入手順 #Java - Qiita
デモのソースコード
https://github.com/de-teiu/javado202311
MyBatisとMyBatis Generatorの話
Java Do 2023/11/18 19

More Related Content

What's hot

大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニックinfinite_loop
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティスAkihiro Kuwano
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현NAVER Engineering
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜 虎の穴 開発室
 
BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編sutepoi
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
MvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かうMvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かうShun Hikita
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜Yoshiki Nakagawa
 
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)makopi 23
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012Esun Kim
 
SQLアンチパターン読書会 15章 ランダムセレクション 説明資料
SQLアンチパターン読書会 15章 ランダムセレクション 説明資料SQLアンチパターン読書会 15章 ランダムセレクション 説明資料
SQLアンチパターン読書会 15章 ランダムセレクション 説明資料Nao Yamamoto
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 

What's hot (20)

大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティス
 
Metaspace
MetaspaceMetaspace
Metaspace
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
 
Apache NiFi の紹介 #streamctjp
Apache NiFi の紹介  #streamctjpApache NiFi の紹介  #streamctjp
Apache NiFi の紹介 #streamctjp
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
 
BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance Comparison
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
MvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かうMvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かう
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
 
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
 
Rest ful api設計入門
Rest ful api設計入門Rest ful api設計入門
Rest ful api設計入門
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
 
SQLアンチパターン読書会 15章 ランダムセレクション 説明資料
SQLアンチパターン読書会 15章 ランダムセレクション 説明資料SQLアンチパターン読書会 15章 ランダムセレクション 説明資料
SQLアンチパターン読書会 15章 ランダムセレクション 説明資料
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 

Similar to MyBatisとMyBatis Generatorの話

BLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみたBLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみたBizan Nishimura
 
Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)shojiro-tanaka
 
Iotlt 28 HoloLensに日本語聞いてもらいたい
Iotlt 28 HoloLensに日本語聞いてもらいたいIotlt 28 HoloLensに日本語聞いてもらいたい
Iotlt 28 HoloLensに日本語聞いてもらいたいMasaki Yamamoto
 
ビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdfビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdfbitbank, Inc. Tokyo, Japan
 
デジタルゲームにおける学習の応用
デジタルゲームにおける学習の応用デジタルゲームにおける学習の応用
デジタルゲームにおける学習の応用Youichiro Miyake
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUISYoshitaka Seo
 
某社のDB運用周りあれこれ
某社のDB運用周りあれこれ某社のDB運用周りあれこれ
某社のDB運用周りあれこれlhfukamachi 深町
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Yohei Sasaki
 
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみたJavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみたSatoshi Takami
 
Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法Nagao Hiroaki
 
Do you wanna be a V-ROCK star?
Do you wanna be a V-ROCK star?Do you wanna be a V-ROCK star?
Do you wanna be a V-ROCK star?Yugo Shimizu
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021Atsushi Nakamura
 
Visual Studio 2010で楽しくデバッグ
Visual Studio 2010で楽しくデバッグVisual Studio 2010で楽しくデバッグ
Visual Studio 2010で楽しくデバッグKazushi Kamegawa
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 

Similar to MyBatisとMyBatis Generatorの話 (15)

BLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみたBLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみた
 
Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)
 
Iotlt 28 HoloLensに日本語聞いてもらいたい
Iotlt 28 HoloLensに日本語聞いてもらいたいIotlt 28 HoloLensに日本語聞いてもらいたい
Iotlt 28 HoloLensに日本語聞いてもらいたい
 
ビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdfビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdf
 
デジタルゲームにおける学習の応用
デジタルゲームにおける学習の応用デジタルゲームにおける学習の応用
デジタルゲームにおける学習の応用
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUIS
 
某社のDB運用周りあれこれ
某社のDB運用周りあれこれ某社のDB運用周りあれこれ
某社のDB運用周りあれこれ
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
 
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみたJavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
 
Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法
 
Do you wanna be a V-ROCK star?
Do you wanna be a V-ROCK star?Do you wanna be a V-ROCK star?
Do you wanna be a V-ROCK star?
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
Visual Studio 2010で楽しくデバッグ
Visual Studio 2010で楽しくデバッグVisual Studio 2010で楽しくデバッグ
Visual Studio 2010で楽しくデバッグ
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 

MyBatisとMyBatis Generatorの話