Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yu Watanabe
February 10, 2016
Technology
150
0
Share
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
Yu Watanabe
February 10, 2016
More Decks by Yu Watanabe
See All by Yu Watanabe
JUnitテストをCI環境で並列で実行する方法とその速度, スケーラビリティ
nabedge
6
2.9k
クラウド時代だからSpring-Retryフレームワーク
nabedge
0
310
ツール比較しながら語るO/RマッパーとDBマイグレーション
nabedge
0
170
JavaでWebサービスを作り続けるための戦略と戦術
nabedge
0
99
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
nabedge
0
80
Selenium再入門
nabedge
0
68
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
nabedge
0
90
テストゼロからイチに進むための戦略と戦術
nabedge
0
97
あなたのプロジェクトが気軽にJavaをバージョンアップするために必要なこと
nabedge
0
67
Other Decks in Technology
See All in Technology
React、まだ楽しくて草
uhyo
6
860
Generative UI × A2UI で AI エージェントを作った話 AI-DLC も使ってみた!
kmiya84377
1
290
エンジニアは生成AIと どのように向き合うべきか? ことばの意味という観点から
verypluming
3
300
AIプラットフォームを運用し続けるための可観測性
tanimuyk
4
680
AIガバナンス実践 - 生成AIコネクタのデータ漏洩リスクと実務対策
knishioka
0
140
Strands Agents超入門
kintotechdev
1
150
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
4
1.8k
基礎から解説!Icebergで紐解くSnowflake×Databricks連携の現在地
cm_yasuhara
0
410
イベントストーミングとKiroの仕様駆動開発で実現する要件の認識合わせプロセス
syobochim
7
980
ビジュアルプログラミングIoTLT vol.23
1ftseabass
PRO
0
160
Platform Engineering as a Product: Criteria for Improvement and Multi-Tenant Design
kumorn5s
0
410
NFLコンペ2026 解法
lycorptech_jp
PRO
0
130
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Rails Girls Zürich Keynote
gr2m
96
14k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
300
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
180
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
440
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
220
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
150
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
The untapped power of vector embeddings
frankvandijk
2
1.7k
How GitHub (no longer) Works
holman
316
150k
Transcript
“jOOQってなんて読むの?” から始める SpringBootと O/Rマッパーの世界 The “Garden” at Bizreach.inc, Shibuya, Tokyo
2016-02-08 @nabedge わたなべ
Who ? • わたなべ ◦ twitter: @nabedge ◦ (株)ビズリーチ SREグループ
エンジニア ◦ O/Rマッパの使用経験 ▪ O/Rマッパ使うなど軟弱ゥ -> S2JDBC -> MyBatis -> -> DBFlute -> QueryDSL...そしてjOOQを試し中 • 過去の講演資料など ◦ http://www.slideshare.net/nabedge/presentations
今日の流れ 1. 参加者全員による自己紹介 a. お名前 b. 業種、職種 (例:会計処理パッケージソフト屋でJava書いてます) c. 最近使っている
RDBMSと、O/Rマッパーは? (例:OracleとMyBatis) 2. jOOQの概要 3. デモいろいろ 4. まとめ
jOOQ概要
jOOQってなんて読むの?
汎用言語とDSL 汎用言語 DSL Domain Specific Language = ドメイン特化言語 エクセルマクロ 正規表現
SQL Makefile Java C言語 HTML
つまりjOOQとは? • SQLをJavaで書け る”internal DSL” (意訳: オレオレDSL) を提供するJavaライブラリと ツールのこと。
jOOQの開発元(の収入源)は?
DEMO https://github.com/nabedge/jooq-demo2
まとめ
Java, SQL, jOOQ • DSL = Domain Specific Language =
ドメイン特化言語 • jOOQとは? ◦ SQLをJavaで書ける”internal DSL” (意訳: オレオレDSL) を提供するJava-APIライブラリとツール • jOOQの効果は? ◦ Java上でタイプセーフにSQLを書いて実行できる
Javaエンジニアにとっての生産性って、 タイプセーフのことですよね。 • CTRL+Spaceキーだけでなんとなく仕事が進められる。 • 書き間違えるとコンパイルエラーでわかる。 実行して初めて間違いがわかるより早い • DB定義を変更するとコンパイルエラーでわかる。 テーブル定義の影響範囲がすぐわかるため
開発とテストをしやすくなる。
jOOQの使い方ざっくり(1) 1. テーブルを張った状態のDBを用意する a. sql-maven-plugin あるいは Flyway が便利 2. jOOQ
+ maven or gradle or API直たたき で、 jOOQ-DSL的なJavaコードを自動生成する 3. 自動生成したコードをIDE上でソースコード扱い(コンパイル対象)にする a. src/main/java 配下に出力するならそこをVCS管理にするかignoreするかは要 検討 b. target/generated-sources (デフォルト)配下に出力するならIDEの設定に少し 注意
jOOQの使い方ざっくり(2) 4. ビジネスロジック層(リポジトリ層)のJavaクラス内で、 自動生成したコードを使ってSQLを組んで実行 5. テーブル定義の変更の場合は1に戻ってやり直すだけ
jOOQでのCRUD • 先ほどデモしたとおりです • デモのコードは https://github.com/nabedge/jooq-demo2 • UpdatableRecordはRuby on RailsでいうActiveRecordに近いらしい
SpringBootとjOOQとトランザクション管理 • SpringBootにはjOOQのDslContextクラスのインスタンスを使うための設定が初め から組み込まれている • “@Transactional” をクラスまたはメソッドにつけるだけでトランザクションに包まれる • @Transactionalの中であれば異なるO/Rマッパを使っても同じトランザクションで管 理される
◦ 全てのO/RマッパのインスタンスがSpring配下で一元管理されたDataSourceを使っているのが前提 (次ページ参照)
どうやってjOOQに移行しようか? • 他のO/Rマッパ(MyBatis, JdbcTemplate, etc)のDataSourceの 管理が、Springの管理下にあるかどうか ヒント:TransactionAwareDataSourceProxy • 正しくSpringを使えばO/Rマッパの複数併用は可能 ◦
併用の例はサンプルコードみてね • 併用しながら徐々にjOOQで書き直せばいい
疑り深いあなたのために • 実際に組み立て&発行されるSQL文を JDBCのレベルでトラップして確認するには? -> log4jdbcをどうぞ • そんなことしなくてもjOOQならSQL文のログ出力機能が初めからあるけどね。 ◦ ただし
“commit”, “rollback” の実行までをもログに吐く にはlog4jdbcしかなさそう。 • jOOQを使いつつ「手組み」の文字列をSQLに含めることも可能 ◦ https://www.jooq.org/doc/3.9/manual/sql-building/plain-sql/ • SQL文の組み立てだけをjOOQのgetSQL()でやって、他の手段でそれを実行するこ とも可能。超疑り深い人用。
おしまい