@PostConstructで入れたダミーデータをviewに表示する

目次

はじめに

前回の続き:Java + Spring-boot + H2でインメモリDB接続を試してみる - みそスープ

前回はこの画面が表示いされるところまでいった(接続の確認まで)

[]

これだと寂しいので、データを入れて表示してみたい。

今回はダミーデータを入れてそれを表示してみる

※@PostConstructはソースコード共有した際にDBに初期データとして入れておくデータがあった際に使用していたのでダミーデータというのが適切かは不明。。

登場人物

  • @PostConstruct
  • ModelAndView
  • Thymeleaf

流れ

  • 前回作ったDBに@PostConstructでダミーデータを注入
  • ModelAndViewに値をセット
  • テンプレートエンジンに変数埋め込んで表示

前回作ったDBに@PostConstructでダミーデータを注入

  • saveAndFlush()(引数のエンティティを保存し、それをデータベースに反映させる)

controller

@PostConstruct
public void init(){
    User user1 = new User();
    user1.setId(1);
    user1.setName(“A");
    userRepository.saveAndFlush(user1);


    User user2 = new User();
    user2.setId(2);
    user2.setName(“B");
    userRepository.saveAndFlush(user2);


    User user3 = new User();
    user3.setId(3);
    user3.setName(“C");
    userRepository.saveAndFlush(user3);

}

ModelAndViewに値をセット

  • setViewName(テンプレートの指定)
  • addObject(オブジェクトの追加)
@RequestMapping(value = "/user/db", method = RequestMethod.GET)
public ModelAndView getUser(ModelAndView mav){
    Iterable<User> list = userRepository.findAll();
    mav.setViewName("userdb");
    mav.addObject("datalist",list);
    return mav;
}

テンプレートエンジンに変数埋め込んで表示

  • th:each="obj : ${datalist}”

index.html

<html  xmlns:th="http://www.thymeleaf.org”> 

<tr th:each="obj : ${datalist}">
    <td th:text="${obj.id}"></td>
    <td th:text="${obj.name}"></td>
</tr>

th:each

  • for-eachと同じ役割
  • obj(変数名)には、モデルに記載されたフィールドにアクセスすることができる
//th:each=“変数名:コレクション”
//datalistはコントローラーで指定した変数
th:each="obj : ${datalist}"

th:text=“${obj.id}”
th:text=“${obj.name}"

番外編(ModelAndViewじゃなくてModelでかいてみた)

@RequestMapping(value = "/user/db", method = RequestMethod.GET)
public String getUser(Model model){
    Iterable<User> list = userRepository.findAll();
    model.addAttribute("datalist",list);
    return "userdb";
}
  • 型(ModelAndView→String)
  • 引数(ModelAndView→Model)
  • addObject()→addAttribute()
  • setViewName()→いらない