エンティティクラスの作成
package com.example.demo; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="mydata") public class MyData{ @Id @GeneratedValue(strategry = GenerationType.AUTO) @Column private long id; @Column(length = 50, nullable = false) private String name; @Column(length = 200, nullable = true) private String mail; @Column(nullable = true) private Integer age; @Column(nullable = true) private String memo; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMail() { return mail; } public void setMail(String mail) { this.mail = mail; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getMemo() { return memo; } public void setMemo(String memo) { this.memo = memo; } }
@Entity
エンティティクラスを示すアノテーション
@Table(name=”mydata”)
割り当てられるテーブルを指定
@Id
プライマリーキー
@GeneratedValue(strategry = GenerationType.AUTO)
プライマリーキーのフィールドに対し値を自動生成
@Column
カラム
Repository
package com.example.demo.repositories; import com.example.demo.MyData; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface MyDataRepository extends JpaRepository<MyData, Long> { }
controller
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.example.demo.repositories.MyDataRepository; @Controller public class HelloController { @Autowired MyDataRepository repository; @RequestMapping("/") public ModelAndView index(ModelAndView mav) { mav.setViewName("index"); mav.addObject("msg","this is sample content."); Iterable<MyData> list = repository.findAll(); mav.addObject("data", list); return mav; } }
html
<table> <form method="post" action="/" th:object="${formModel}"> <tr> <td><label for="name">名前</label></td> <td><input type="text" name="name" th:value="*{name}"></td> </tr> <tr> <td><label for="age">年齢</label></td> <td><input type="text" name="age" th:value="*{age}"></td> </tr> <tr> <td><label for="mail">メール</label></td> <td><input type="text" name="mail" th:value="*{mail}"></td> </tr> <tr> <td><label for="memo">メモ</label></td> <td><textarea name="memo" th:text="*{memo}" cols="20" rows="5"></textarea></td> </tr> <tr> <td></td> <td><input type="sbmit"></td> </tr> </form> </table> <hr> <table> <tr><th>ID</th><th>名前</th></tr> <tr th:each="obj : ${datalist}"> <td th:text="${obj.id}"></td> <td th:text="${obj.name}"></td> </tr> </table>
Controller
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import com.example.demo.repositories.MyDataRepository; @Controller public class HelloController { @Autowired MyDataRepository repository; @RequestMapping(value="/", method=RequestMethod.GET) public ModelAndView index( @ModelAttribute("formModel") MyData mydata, ModelAndView mav) { mav.setViewName("index"); mav.addObject("msg","this is sample content."); Iterable<MyData> list = repository.findAll(); mav.addObject("datalist", list); return mav; } @RequestMapping(value="/", method= RequestMethod.POST) @Transactional(readOnly=false) public ModelAndView form( @ModelAttribute("formModel") MyData mydata, ModelAndView mav) { repository.saveAndFlush(mydata); return new ModelAndView("redirect:/"); } }
なんやこれは。。。
HSQLDB/H2 はデフォルトでメモリ内にデータをキャッシュしている。