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
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
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
690
Lexical Analysis
shigashiyama
1
150
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
480
いざ、BSC討伐の旅
nikinusu
2
780
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
250
OTelCol_TailSampling_and_SpanMetrics
gumamon
1
200
OCI Vault 概要
oracle4engineer
PRO
0
9.7k
iOS/Androidで同じUI体験をネ イティブで作成する際に気をつ けたい落とし穴
fumiyasac0921
1
110
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
130
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
130
Adopting Jetpack Compose in Your Existing Project - GDG DevFest Bangkok 2024
akexorcist
0
110
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
655
59k
Agile that works and the tools we love
rasmusluckow
327
21k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Designing Experiences People Love
moore
138
23k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
The Cult of Friendly URLs
andyhume
78
6k
4 Signs Your Business is Dying
shpigford
180
21k
Visualization
eitanlees
145
15k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
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
ありがとう ございました