Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Modern Web Development with ninjaframework
Search
Takafumi Yoshida
November 15, 2014
Technology
0
3k
Modern Web Development with ninjaframework
Takafumi Yoshida
November 15, 2014
Tweet
Share
More Decks by Takafumi Yoshida
See All by Takafumi Yoshida
ECSとSQSでスケーラブルなバッチを作った
zephiransas
2
1.2k
DynamoDB Step Zero to One
zephiransas
0
620
ECSとALBで始めるblue/greenデプロイメント
zephiransas
2
310
DynamoDB関連のアップデート紹介 #reinvent2018
zephiransas
0
710
CloudGarageでGitBucketサーバをたててみた
zephiransas
0
490
プログラマが知っておくといいかもしれないCSSのハナシ
zephiransas
1
970
ラクして学ぶ英語(LT版)
zephiransas
0
190
あなたとCrystal、いますぐダウンロード
zephiransas
1
1.7k
使ってみようLombok
zephiransas
0
240
Other Decks in Technology
See All in Technology
MTDDC Meetup TOKYO 2024 運用フェーズに突入したウェブサイト。年々コスト増えていませんか?
kurashige
1
140
MediaPipe と ML Kit ってどう ちがうの? / What is the difference between MediaPipe and ML Kit?
yanzm
0
160
間違いだらけのポストモーテム - ホントに役立つレビューはこうだ!
jacopen
5
810
2024/11/29_失敗談から学ぶ! エンジニア向けre:Invent攻略アンチパターン集
hiashisan
0
180
LY Accessibility Guidelines @fukuoka_a11yconf_前夜祭
lycorptech_jp
PRO
1
130
情シスの引継ぎが大変という話
miyu_dev
2
520
LINEヤフーにおける超大規模プラットフォーム実現への挑戦と学び / Challenges and Lessons in Building an Ultra-Large-Scale Platform at LY Corporation
hhiroshell
1
840
SLMをエッジAIとして検証してみて分かったこと
iotcomjpadmin
0
180
Bytebaseで実現する データベース管理の効率化
shogo452
1
130
【CNDW2024】SIerで200人クラウドネイティブのファンを増やした話
yuta1979
1
240
共創するアーキテクチャ ~チーム全体で築く持続可能な開発エコシステム~ / Co-Creating Architecture - A Sustainable Development Ecosystem Built by the Entire Team
bitkey
PRO
1
3.8k
ご挨拶
iotcomjpadmin
0
180
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Typedesign – Prime Four
hannesfritz
40
2.4k
For a Future-Friendly Web
brad_frost
175
9.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
A Philosophy of Restraint
colly
203
16k
Docker and Python
trallard
40
3.1k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Transcript
Modern Web Development with ninjaframework 岡山Javaユーザ会/吉田貴文(@zephiransas)
#jjug_ccc or #ccc_r56
岡山Javaユーザ会 について • 岡山で勉強会やハンズオンやってます • 基本、ゆるふわ • Javaに限らずフリーに喋れます • 講師(常に)探してます
第1回 勉強会
None
Java8ハンズオン@後楽園
None
• 吉田貴文(@zephiransas) • 岡山でRailsを使ったパッケージソフト開発に従事 • 元々はSIerでJavaやってました • 岡山Javaユーザ会を主催 • 岡山でJava(や諸々)の勉強会を主催or参加
• 勉強会カメラマン(Nikon D600)
よろしく お願いします
Modern Web Development with ninjaframework 岡山Javaユーザ会/吉田貴文(@zephiransas)
ninjaframeworkの特徴 • 100% Pure Java • Play1を諦めた、Seasar2難民、etc… • Railsライクなフルスタックフレームワーク •
既存の良いライブラリを組み合わせる • Servlet,JPA,Flyway,FreeMarker,Guice,Bean Validator…
アジェンダ • 単純なCRUDアプリ • DBを使うプロジェクトをScaffold • マイグレーションでテーブルを作成 • 一覧画面の作成 •
新規登録画面の作成 • 画面表示とデータ保存
Scaffold • mavenからscaffoldする • 実行するには • あとはお好みの方法でIDEに取り込み • mvn idea:idea、mvn
eclipse:eclipse
Scaffoldで作成される フォルダ(1) • ・assets • cssやjavascript,imageなど • ・conf • Routes,メッセージリソースなど
• ・controller • コントローラ
Scaffoldで作成される フォルダ(2) • ・dao • データアクセス層。通常はEntityManagerをInject してDBとのデータ入出力を行う • ・db.migration •
Flywayでマイグレーションする際のSQLを置く
Scaffoldで作成される フォルダ(3) • ・models • JPAのEntityを置く • ・views • FreeMarkerで書かれたテンプレートを置く
Migration • Flywayを使用 • db.migrationフォルダにSQLファイルを作成 • V3__.sql,V4__.sql・・・と言った連番を付与 • mvn ninja:runで実行時、未実施のマイグレーショ
ンがあれば、自動で実行
V3__.sql
モデルの作成 • modelsパッケージに作成 • JPAのEntityとして作成
一覧画面 • Routesの設定 • Controllerの作成 • Daoの作成 • Viewの作成
Routesの設定 • conf/RoutesにURLを定義 http://localhost:8080/book にGETでアクセス時、 BookControllerのindexメソッドを実行
Controllerの作成(1) • controllersパッケージに作成 • 表示するビューはコントローラ名とメソッドから決定される • 明示的に指定することも可能 メソッド実行後、ビューとして views/BookController/index.ftl.htmlを返す
Daoの作成 • JPAを使用 • 全件を取得するfindAllメソッドを実装する EntityManagerをInjectする
Controllerの作成(2) BookDaoをInjectする 一覧データをRequestスコープにセット
Viewの作成 • views/BookController/index.ftl.htmlを作成 • テンプレートエンジンはFreeMarker Controllerでセットしたbooksの各要素 を、”book”として取得 各Entityの値を埋め込み
一覧画面
新規画面 Part.1 • 登録フォームを表示するまで • Dtoの作成 • Routesの設定 • Controllerの修正
• Viewの作成
Dtoの作成(1) • 画面の入力内容を保持するクラス • modelsパッケージに作成 • 実際にはdto(form?)パッケージとかのほうがいいかも? • 必要に応じて、Validation用のAnnotationを付与 •
Hibernate Validatorを使用 • JSR303(Bean Validation)のAnnotationが使えます
Dtoの作成(2) 必須入力チェックのAnnotationを付与
Routesの設定 GETで/book/newにアクセスした場合 POSTで/book/newにアクセスした場合
Controllerの修正(2) 初期化したDtoをセットして画面を表示する 表示するテンプレートを明示的に指定
Viewの作成 submit先は/book/newにPOSTメソッドで dtoの値を設定 form.ftl.html
新規画面
新規画面 Part.2 • 登録フォームの内容をValidation • エラーがあれば、フォームに表示 • Routesの設定 • Daoの修正
• Controllerの修正 • Viewの作成
Routesの設定 • conf/RoutesにURLを定義 http://localhost:8080/book/new にPOSTでアクセス 時、BookControllerのcreateメソッドを実行
Daoにメソッドを追加 • Bookを1件追加するaddメソッドを追加 @Transactionalアノテーションで、メソッド内に トランザクションを適用する 引数のEntityをinsert
Controllerの作成(1) Validationを有効にする エラーメッセージをRequestスコープにセット エラーがあればtrueを返す
Controllerの作成(2) Dtoの値をBook Entityに詰め替え Daoを使ってInsert 一覧へRedirect
Viewの作成 • エラーメッセージを表示する Validation内容に応じたメッセージ
新規画面 Validationのエラーが表示される
まとめ • Scaffold • マイグレーション(Flyway) • Controllerの作り方、Viewの呼び方(ninja,Guice) • Daoの作り方(JPA, Guice)
• DTOを使ったValidation(Hibernate Validation) • Viewの書き方(FreeMarker)
• 今日解説したコードは以下の • GitHubリポジトリにアップしています • https://github.com/zephiransas/ninja-ccc • http://goo.gl/qpAhqh
ありがとう ございました