Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modern Web Development with ninjaframework

Modern Web Development with ninjaframework

Ab963de01b53e635d6e699d6d7d162b1?s=128

Takafumi Yoshida

November 15, 2014
Tweet

Transcript

  1. Modern Web Development with ninjaframework 岡山Javaユーザ会/吉田貴文(@zephiransas) 

  2. #jjug_ccc or #ccc_r56 

  3. 岡山Javaユーザ会 について • 岡山で勉強会やハンズオンやってます • 基本、ゆるふわ • Javaに限らずフリーに喋れます • 講師(常に)探してます

    
  4. 第1回 勉強会

  5. None
  6. Java8ハンズオン@後楽園

  7. None
  8. • 吉田貴文(@zephiransas) • 岡山でRailsを使ったパッケージソフト開発に従事 • 元々はSIerでJavaやってました • 岡山Javaユーザ会を主催 • 岡山でJava(や諸々)の勉強会を主催or参加

    • 勉強会カメラマン(Nikon D600) 
  9. よろしく お願いします 

  10. Modern Web Development with ninjaframework 岡山Javaユーザ会/吉田貴文(@zephiransas) 

  11. ninjaframeworkの特徴 • 100% Pure Java • Play1を諦めた、Seasar2難民、etc… • Railsライクなフルスタックフレームワーク •

    既存の良いライブラリを組み合わせる • Servlet,JPA,Flyway,FreeMarker,Guice,Bean Validator… 
  12. アジェンダ • 単純なCRUDアプリ • DBを使うプロジェクトをScaffold • マイグレーションでテーブルを作成 • 一覧画面の作成 •

    新規登録画面の作成 • 画面表示とデータ保存 
  13. Scaffold • mavenからscaffoldする • 実行するには • あとはお好みの方法でIDEに取り込み • mvn idea:idea、mvn

    eclipse:eclipse 
  14. 

  15. Scaffoldで作成される フォルダ(1) • ・assets • cssやjavascript,imageなど • ・conf • Routes,メッセージリソースなど

    • ・controller • コントローラ 
  16. Scaffoldで作成される フォルダ(2) • ・dao • データアクセス層。通常はEntityManagerをInject してDBとのデータ入出力を行う • ・db.migration •

    Flywayでマイグレーションする際のSQLを置く 
  17. Scaffoldで作成される フォルダ(3) • ・models • JPAのEntityを置く • ・views • FreeMarkerで書かれたテンプレートを置く

    
  18. Migration • Flywayを使用 • db.migrationフォルダにSQLファイルを作成 • V3__.sql,V4__.sql・・・と言った連番を付与 • mvn ninja:runで実行時、未実施のマイグレーショ

    ンがあれば、自動で実行 
  19. V3__.sql 

  20. モデルの作成 • modelsパッケージに作成 • JPAのEntityとして作成 

  21. 一覧画面 • Routesの設定 • Controllerの作成 • Daoの作成 • Viewの作成 

  22. Routesの設定 • conf/RoutesにURLを定義  http://localhost:8080/book にGETでアクセス時、 BookControllerのindexメソッドを実行

  23. Controllerの作成(1) • controllersパッケージに作成 • 表示するビューはコントローラ名とメソッドから決定される • 明示的に指定することも可能  メソッド実行後、ビューとして views/BookController/index.ftl.htmlを返す

  24. Daoの作成 • JPAを使用 • 全件を取得するfindAllメソッドを実装する  EntityManagerをInjectする

  25. Controllerの作成(2)  BookDaoをInjectする 一覧データをRequestスコープにセット

  26. Viewの作成 • views/BookController/index.ftl.htmlを作成 • テンプレートエンジンはFreeMarker  Controllerでセットしたbooksの各要素 を、”book”として取得 各Entityの値を埋め込み

  27. 一覧画面 

  28. 新規画面 Part.1 • 登録フォームを表示するまで • Dtoの作成 • Routesの設定 • Controllerの修正

    • Viewの作成 
  29. Dtoの作成(1) • 画面の入力内容を保持するクラス • modelsパッケージに作成 • 実際にはdto(form?)パッケージとかのほうがいいかも? • 必要に応じて、Validation用のAnnotationを付与 •

    Hibernate Validatorを使用 • JSR303(Bean Validation)のAnnotationが使えます 
  30. Dtoの作成(2)  必須入力チェックのAnnotationを付与

  31. Routesの設定  GETで/book/newにアクセスした場合 POSTで/book/newにアクセスした場合

  32. Controllerの修正(2)  初期化したDtoをセットして画面を表示する 表示するテンプレートを明示的に指定

  33. Viewの作成  submit先は/book/newにPOSTメソッドで dtoの値を設定 form.ftl.html

  34. 新規画面 

  35. 新規画面 Part.2 • 登録フォームの内容をValidation • エラーがあれば、フォームに表示 • Routesの設定 • Daoの修正

    • Controllerの修正 • Viewの作成 
  36. Routesの設定 • conf/RoutesにURLを定義  http://localhost:8080/book/new にPOSTでアクセス 時、BookControllerのcreateメソッドを実行

  37. Daoにメソッドを追加 • Bookを1件追加するaddメソッドを追加  @Transactionalアノテーションで、メソッド内に トランザクションを適用する 引数のEntityをinsert

  38. Controllerの作成(1)  Validationを有効にする エラーメッセージをRequestスコープにセット エラーがあればtrueを返す

  39. Controllerの作成(2)  Dtoの値をBook Entityに詰め替え Daoを使ってInsert 一覧へRedirect

  40. Viewの作成 • エラーメッセージを表示する  Validation内容に応じたメッセージ

  41. 新規画面  Validationのエラーが表示される

  42. まとめ • Scaffold • マイグレーション(Flyway) • Controllerの作り方、Viewの呼び方(ninja,Guice) • Daoの作り方(JPA, Guice)

    • DTOを使ったValidation(Hibernate Validation) • Viewの書き方(FreeMarker) 
  43. • 今日解説したコードは以下の • GitHubリポジトリにアップしています • https://github.com/zephiransas/ninja-ccc • http://goo.gl/qpAhqh 

  44. ありがとう ございました