9月11日

CRUDの実装

エンティティの削除

エンティティを削除するには、remove を使用するが、その前に merge する必要がある。(テキストp.297)

MyDataDaoImpl.java

	public void delete(MyData data) {
		EntityManager manager = factory.createEntityManager();
		EntityTransaction tx = manager.getTransaction();
		tx.begin();
		MyData entity = manager.merge(data);
		manager.remove(entity);
		tx.commit();
		manager.close();
	}

	public void delete(long id) {
		delete(findById(id));
	}

データベースマネージャからSQLをダイレクトに実行する方法

別のアプリDatabaseManagerを使用することで、SQLを実行できる。

  1. 以下のファイルをローカルにコピーする。
    \\KGAKUSEI1\share\澤田\hsqldb-2.3.2.zip
  2. C:\Users\se3\db の下に解凍する。
  3. コマンドプロンプトを起動。
  4. 以下のコマンドを実行する。
    > cd C:\Users\se3\db\hsqldb-2.3.2\hsqldb
    > java -cp lib/hsqldb.jar org.hsqldb.util.DatabaseManager
    

hsqldb

spring12

hsqldbmanager

JSPに編集と削除のリンクを追加する

mydata.jsp のテーブル部分に、編集と削除のリンクをanchorタグで追加する。

mydata.jsp

	<c:if test="${datalist != null}">
		<table border="1">
			<tr><th>ID</th><th>名前</th></tr>
			<c:forEach var="obj" items="${datalist}" varStatus="status">
				<tr>
					<td>${obj.id}</td>
					<td>${obj.name}</td>
					<td><a href="/MyData/update?id=${obj.id}">編集</a></td>
					<td><a href="/MyData/delete?id=${obj.id}">削除</a></td>
				</tr>
			</c:forEach>
		</table>
	</c:if>

JPQLを活用する

MyDataアプリケーションで検索機能を追加する。

find.jspの作成

find.jsp

<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>${title}</title>
</head>
<body>
	<h1>${title}</h1>
	<p>${message}</p>

	<table>
	<form action="/MyData/find" method="post">
		<tr>
			<td>FIND:</td>
			<td><input type="text" name="fstr" size="20" /></td>
		</tr>
		<tr>
			<td></td><td><input type="submit" /></td>
		</tr>
	</form>
	</table>

	<hr />
	<c:if test="${datalist != null}">
		<table border="1">
			<tr><th>ID</th><th>名前</th></tr>
			<c:forEach var="obj" items="${datalist}" varStatus="status">
				<tr>
					<td>${obj.id}</td>
					<td>${obj.name}</td>
				</tr>
			</c:forEach>
		</table>
	</c:if>
</body>
</html>

コントローラの追加

MyDataControllerに検索用メソッドを追加する。

MyDataController.java

	@RequestMapping(value = "/find", method = RequestMethod.GET)
	public String find(Model model) {
		model.addAttribute("title", "MyData");
		model.addAttribute("message", "検索のサンプルです");
		MyDataDao<MyData> dao = new MyDataDaoImpl();
		List<MyData> list = dao.getAll();
		model.addAttribute("datalist", list);
		return "find";
	}

	@RequestMapping(value = "/find", method = RequestMethod.POST)
	public String search(@RequestParam(value = "fstr")String s, Model model) {
		model.addAttribute("title", "MyData");
		model.addAttribute("message", "「" + s + "」の検索結果");
		MyDataDao<MyData> dao = new MyDataDaoImpl();
		List<MyData> list = dao.find(s);
		model.addAttribute("datalist", list);
		return "find";
	}

DAOにfindメソッドを追加する

MyDataDao.java

package jp.abc;

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

public interface MyDataDao <T> extends Serializable {
	public List<T> getAll();
	public T findById(long id);
	public T findByName(String name);
	public List<T> find(String s);
	public void add(T data);
	public void update(T data);
	public void delete(T data);
	public void delete(long id);
}

MyDataDaoImpl.java

	public List<MyData> find(String s) {
		EntityManager manager = factory.createEntityManager();
		List<MyData> list = null;
		String qs = "from MyData where id = :fstr";
		Query query = manager.createQuery(qs).setParameter("fstr", Long.parseLong(s));
		list = query.getResultList();
		manager.close();
		return list;
	}

コメントを残す

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