6月25日

HSQLDBサーバーが動いたら、MyBootAppを起動する。
起動すると、自動的に3つのレコードが書き込まれる。
起動するたびにレコードが書き込まれるのはまずいので、以下のコードを削除する。

MyDataController.java

	@PostConstruct
	public void init() {
		MyData d1 = new MyData();
		d1.setName("tuyano");
		d1.setAge(123);
		d1.setMail("syoda@tuyano.com");
		d1.setMemo("this is data!");
		repository.saveAndFlush(d1);
		MyData d2 = new MyData();
		d2.setName("hanako");
		d2.setAge(15);
		d2.setMail("hanako@flower.com");
		d2.setMemo("this is data!");
		repository.saveAndFlush(d2);
		MyData d3 = new MyData();
		d3.setName("sachiko");
		d3.setAge(37);
		d3.setMail("sachiko@happy");
		d3.setMemo("this is data!");
		repository.saveAndFlush(d3);
	}

データベースマネージャを起動するBATファイルも作成する。
デスクトップにmanager.bat を作成する。

cd C:\pleiades\hsqldb-2.4.1\hsqldb\data
java -classpath ..\lib\hsqldb.jar org.hsqldb.util.DatabaseManager

データベースマネージャを起動すると、接続先設定の画面が出るので、以下のように入力する。

データベースのデータを毎回消さないようにするために、application.properties に設定を1行追加する。

spring.datasource.url=jdbc:hsqldb:hsql://localhost/mydata
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.HSQLDialect
spring.jpa.hibernate.ddl-auto=update

DAOを使ったデータベースアクセス

Spring Boot ではリポジトリを使って容易にデータベースアクセスできる。
Java標準のJAPを使う場合は、一般的にDAOを使ってデータベースアクセスを実装する。

まずDAOインタフェースを作成する。

package jp.abc;

import java.io.Serializable;
import java.util.List;

public interface MyDataDao <T> extends Serializable {
	public List<T> getAll();
}

そして、DAOの実装クラスを作成する。

package jp.abc;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import jp.abc.MyData;
import jp.abc.MyDataDao;

public class MyDataDaoImpl implements MyDataDao<MyData> {

	private EntityManager entityManager;

	public MyDataDaoImpl() {
		super();
	}
	public MyDataDaoImpl(EntityManager entityManager) {
		this();
		this.entityManager = entityManager;
	}

	@Override
	public List<MyData> getAll() {
		Query query = entityManager.createQuery("from MyData");
		List<MyData> list = query.getResultList();
		entityManager.close();
		return list;
	}

}

コントローラには、以下のコードを追加する。
URL: /dao にアクセスしたときに、DAO経由でデータベースアクセスを実行する。

	@PersistenceContext
	EntityManager entityManager;

	MyDataDao<MyData> dao;

	@PostConstruct
	public void init() {
		dao = new MyDataDaoImpl(entityManager);
	}

	@RequestMapping("/dao")
	public ModelAndView dao(ModelAndView mav) {
		mav.setViewName("dao");
		mav.addObject("msg", "DAOを使ったサンプルです。");
		List<MyData> list = dao.getAll();
		mav.addObject("datalist", list);
		return mav;
	}

HTMLテンプレートを dao.html として用意する。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>top page</title>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<style type="text/css">
h1 {
  font-size: 18pt;
  font-weight: bold;
  color: gray;
}
body {
  font-size: 13pt;
  color: gray;
  margin: 5px 25px;
}
pre {
  border: solid 3px #ddd;
  padding: 10px;
}
tr {
  margin: 5px;
}
th {
  padding: 5px;
  color: white;
  background: darkgray;
}
td {
  padding: 5px;
  color: black;
  background: #f0f0f0;
}
.err {
  color: red;
}
</style>
</head>
<body>

<h1>MyData page</h1>
<p th:text="${msg}"></p>

<hr />
<table>
  <tr>
    <th>ID</th><th>名前</th><th>メール</th><th>年齢</th><th>メモ</th>
  </tr>
  <tr th:each="obj : ${datalist}">
    <td th:text="${obj.id}"></td>
    <td th:text="${obj.name}"></td>
    <td th:text="${obj.mail}"></td>
    <td th:text="${obj.age}"></td>
    <td th:text="${obj.memo}"></td>
  </tr>
</table>


</body>
</html>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください