Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
Search
Yu Watanabe
February 10, 2016
Technology
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
Yu Watanabe
February 10, 2016
More Decks by Yu Watanabe
See All by Yu Watanabe
JUnitテストをCI環境で並列で実行する方法とその速度, スケーラビリティ
nabedge
6
3.1k
クラウド時代だからSpring-Retryフレームワーク
nabedge
0
340
ツール比較しながら語るO/RマッパーとDBマイグレーション
nabedge
0
190
JavaでWebサービスを作り続けるための戦略と戦術
nabedge
0
120
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
nabedge
0
92
Selenium再入門
nabedge
0
87
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
nabedge
0
100
テストゼロからイチに進むための戦略と戦術
nabedge
0
110
あなたのプロジェクトが気軽にJavaをバージョンアップするために必要なこと
nabedge
0
85
Other Decks in Technology
See All in Technology
続・ソフトウェアアーキテクトのための意思決定術: Decision Readiness, Revisited — When AI Changes the Economics of Software Architecture
snoozer05
PRO
9
2.8k
MCPでAIが自分で調べに行く
cdataj
0
140
コードレビューをなくして見えたもの
henteko
0
150
令和の今、あらためて IAM を考える。アクセスキーを「無くせない現実」との向き合い方
kazzpapa3
0
590
生成AI時代のIAMのマニアックな話
takuros
6
2.9k
これからのデータエンジニアの役割について考える / Rethinking the Role of Data Engineers in the AI Era
okiyuki99
0
270
GCASアップデート(202607-202610)
techniczna
1
250
AI時代の組織作り:チーム開発から「個人×AI」への移行と、持続可能な「開発資本」の築き方
ham0215
2
810
AWSを利用する上で知っておきたい名前解決の話 2026
nagisa53
5
3.4k
The Author Pays
hiccupps
0
150
evcc & Home Assistant
naltatis
0
520
「AIチャットからもできないの?」と言われたら ~業務アプリをMCP対応するときの認証・認可の勘所
oidfj
0
290
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Believing is Seeing
oripsolob
1
270
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
370
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Marketing to machines
jonoalderson
1
6k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
400
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Mind Mapping
helmedeiros
1
440
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.9k
We Have a Design System, Now What?
morganepeng
55
8.4k
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()でやって、他の手段でそれを実行するこ とも可能。超疑り深い人用。
おしまい