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
3.2k
0
Share
Modern Web Development with ninjaframework
Takafumi Yoshida
November 15, 2014
More Decks by Takafumi Yoshida
See All by Takafumi Yoshida
ECSとSQSでスケーラブルなバッチを作った
zephiransas
2
1.4k
DynamoDB Step Zero to One
zephiransas
0
730
ECSとALBで始めるblue/greenデプロイメント
zephiransas
2
340
DynamoDB関連のアップデート紹介 #reinvent2018
zephiransas
0
820
CloudGarageでGitBucketサーバをたててみた
zephiransas
0
530
プログラマが知っておくといいかもしれないCSSのハナシ
zephiransas
1
1.1k
ラクして学ぶ英語(LT版)
zephiransas
0
210
あなたとCrystal、いますぐダウンロード
zephiransas
1
1.8k
使ってみようLombok
zephiransas
0
270
Other Decks in Technology
See All in Technology
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
5
1.4k
制約を設計する - 非決定性との境界線 / Designing constraints
soudai
PRO
6
1.7k
VSCode中心だった自分がターミナル沼に入門した話
sanogemaru
0
920
すごいぞManaged Kubernetes
harukasakihara
1
320
スクラムを支える内部品質の話
iij_pr
0
260
ZOZOTOWNリプレイスでのSkills導入までの流れとこれから
zozotech
PRO
4
2.4k
15年メンテしてきたdotfilesから開発トレンドを振り返る 2011 - 2026
giginet
PRO
2
280
Even G2 クイックスタートガイド(日本語版)
vrshinobi1
0
200
ADOTで始めるサーバレスアーキテクチャのオブザーバビリティ
alchemy1115
2
140
【PHPカンファレンス小田原2026】Webアプリケーションエンジニアにも知ってほしい オブザーバビリティ の本質
fendo181
0
180
「決め方」の渡し方 / How to hand over the "decision-making process"
pauli
7
1.2k
バックオフィスPJのPjMをコーポレートITが担うとうまくいく3つの理由
yueda256
1
270
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
67k
Producing Creativity
orderedlist
PRO
348
40k
Tell your own story through comics
letsgokoyo
1
880
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Building the Perfect Custom Keyboard
takai
2
720
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
Agile that works and the tools we love
rasmusluckow
331
21k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
260
How to Ace a Technical Interview
jacobian
281
24k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
170
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.9k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
310
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
ありがとう ございました