Modern Web Development with ninjaframework
by
Takafumi Yoshida
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Modern Web Development with ninjaframework 岡山Javaユーザ会/吉田貴文(@zephiransas)
Slide 2
Slide 2 text
#jjug_ccc or #ccc_r56
Slide 3
Slide 3 text
岡山Javaユーザ会 について • 岡山で勉強会やハンズオンやってます • 基本、ゆるふわ • Javaに限らずフリーに喋れます • 講師(常に)探してます
Slide 4
Slide 4 text
第1回 勉強会
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
Java8ハンズオン@後楽園
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
• 吉田貴文(@zephiransas) • 岡山でRailsを使ったパッケージソフト開発に従事 • 元々はSIerでJavaやってました • 岡山Javaユーザ会を主催 • 岡山でJava(や諸々)の勉強会を主催or参加 • 勉強会カメラマン(Nikon D600)
Slide 9
Slide 9 text
よろしく お願いします
Slide 10
Slide 10 text
Modern Web Development with ninjaframework 岡山Javaユーザ会/吉田貴文(@zephiransas)
Slide 11
Slide 11 text
ninjaframeworkの特徴 • 100% Pure Java • Play1を諦めた、Seasar2難民、etc… • Railsライクなフルスタックフレームワーク • 既存の良いライブラリを組み合わせる • Servlet,JPA,Flyway,FreeMarker,Guice,Bean Validator…
Slide 12
Slide 12 text
アジェンダ • 単純なCRUDアプリ • DBを使うプロジェクトをScaffold • マイグレーションでテーブルを作成 • 一覧画面の作成 • 新規登録画面の作成 • 画面表示とデータ保存
Slide 13
Slide 13 text
Scaffold • mavenからscaffoldする • 実行するには • あとはお好みの方法でIDEに取り込み • mvn idea:idea、mvn eclipse:eclipse
Slide 14
Slide 14 text
Slide 15
Slide 15 text
Scaffoldで作成される フォルダ(1) • ・assets • cssやjavascript,imageなど • ・conf • Routes,メッセージリソースなど • ・controller • コントローラ
Slide 16
Slide 16 text
Scaffoldで作成される フォルダ(2) • ・dao • データアクセス層。通常はEntityManagerをInject してDBとのデータ入出力を行う • ・db.migration • Flywayでマイグレーションする際のSQLを置く
Slide 17
Slide 17 text
Scaffoldで作成される フォルダ(3) • ・models • JPAのEntityを置く • ・views • FreeMarkerで書かれたテンプレートを置く
Slide 18
Slide 18 text
Migration • Flywayを使用 • db.migrationフォルダにSQLファイルを作成 • V3__.sql,V4__.sql・・・と言った連番を付与 • mvn ninja:runで実行時、未実施のマイグレーショ ンがあれば、自動で実行
Slide 19
Slide 19 text
V3__.sql
Slide 20
Slide 20 text
モデルの作成 • modelsパッケージに作成 • JPAのEntityとして作成
Slide 21
Slide 21 text
一覧画面 • Routesの設定 • Controllerの作成 • Daoの作成 • Viewの作成
Slide 22
Slide 22 text
Routesの設定 • conf/RoutesにURLを定義 http://localhost:8080/book にGETでアクセス時、 BookControllerのindexメソッドを実行
Slide 23
Slide 23 text
Controllerの作成(1) • controllersパッケージに作成 • 表示するビューはコントローラ名とメソッドから決定される • 明示的に指定することも可能 メソッド実行後、ビューとして views/BookController/index.ftl.htmlを返す
Slide 24
Slide 24 text
Daoの作成 • JPAを使用 • 全件を取得するfindAllメソッドを実装する EntityManagerをInjectする
Slide 25
Slide 25 text
Controllerの作成(2) BookDaoをInjectする 一覧データをRequestスコープにセット
Slide 26
Slide 26 text
Viewの作成 • views/BookController/index.ftl.htmlを作成 • テンプレートエンジンはFreeMarker Controllerでセットしたbooksの各要素 を、”book”として取得 各Entityの値を埋め込み
Slide 27
Slide 27 text
一覧画面
Slide 28
Slide 28 text
新規画面 Part.1 • 登録フォームを表示するまで • Dtoの作成 • Routesの設定 • Controllerの修正 • Viewの作成
Slide 29
Slide 29 text
Dtoの作成(1) • 画面の入力内容を保持するクラス • modelsパッケージに作成 • 実際にはdto(form?)パッケージとかのほうがいいかも? • 必要に応じて、Validation用のAnnotationを付与 • Hibernate Validatorを使用 • JSR303(Bean Validation)のAnnotationが使えます
Slide 30
Slide 30 text
Dtoの作成(2) 必須入力チェックのAnnotationを付与
Slide 31
Slide 31 text
Routesの設定 GETで/book/newにアクセスした場合 POSTで/book/newにアクセスした場合
Slide 32
Slide 32 text
Controllerの修正(2) 初期化したDtoをセットして画面を表示する 表示するテンプレートを明示的に指定
Slide 33
Slide 33 text
Viewの作成 submit先は/book/newにPOSTメソッドで dtoの値を設定 form.ftl.html
Slide 34
Slide 34 text
新規画面
Slide 35
Slide 35 text
新規画面 Part.2 • 登録フォームの内容をValidation • エラーがあれば、フォームに表示 • Routesの設定 • Daoの修正 • Controllerの修正 • Viewの作成
Slide 36
Slide 36 text
Routesの設定 • conf/RoutesにURLを定義 http://localhost:8080/book/new にPOSTでアクセス 時、BookControllerのcreateメソッドを実行
Slide 37
Slide 37 text
Daoにメソッドを追加 • Bookを1件追加するaddメソッドを追加 @Transactionalアノテーションで、メソッド内に トランザクションを適用する 引数のEntityをinsert
Slide 38
Slide 38 text
Controllerの作成(1) Validationを有効にする エラーメッセージをRequestスコープにセット エラーがあればtrueを返す
Slide 39
Slide 39 text
Controllerの作成(2) Dtoの値をBook Entityに詰め替え Daoを使ってInsert 一覧へRedirect
Slide 40
Slide 40 text
Viewの作成 • エラーメッセージを表示する Validation内容に応じたメッセージ
Slide 41
Slide 41 text
新規画面 Validationのエラーが表示される
Slide 42
Slide 42 text
まとめ • Scaffold • マイグレーション(Flyway) • Controllerの作り方、Viewの呼び方(ninja,Guice) • Daoの作り方(JPA, Guice) • DTOを使ったValidation(Hibernate Validation) • Viewの書き方(FreeMarker)
Slide 43
Slide 43 text
• 今日解説したコードは以下の • GitHubリポジトリにアップしています • https://github.com/zephiransas/ninja-ccc • http://goo.gl/qpAhqh
Slide 44
Slide 44 text
ありがとう ございました