9月4日

試験成績検索アプリを作成する

前期で学習した、SpringMVCを使ってCRUD機能を実装するWebアプリの復習のため、簡単なWebアプリを作成する。

先週の内容の復習

  1. SpringMVCプロジェクトを作成
  2. 成績を検索する画面を作成
  3. HomeControllerを作成
  4. 成績の検索結果を表示する画面を作成
  5. HomeControllerに検索を実行するメソッドを追加
  6. 成績を登録する画面を作成
  7. EditControllerを作成
  8. 成績を登録するリクエストを受け取れるようにする
  9. Resultエンティティを作成
  10. Resultを使うようにedit.jspを修正
  11. DAOを使用してデータベースに保存する

HSQLDBと接続する

Eclipseでプラグインの設定を変更する。
データベース名を変更してHSQLDBサーバーを再起動する。

exam-5

検索の実装

受験番号を元に成績を検索する実装を追加する。

DAOに検索のためのメソッドを追加する。

ResultDao.java

package jp.abc;

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

public interface ResultDao extends Serializable {
    public List<Result> getAll();
    public void add(Result result);
    public Result find(String number);
}

ResultDaoImplに検索の実装を追加する。

ResultDaoImpl.java

	public Result find(String number) {
        EntityManager manager = factory.createEntityManager();
		CriteriaBuilder builder = manager.getCriteriaBuilder();
		CriteriaQuery<Result> query = builder.createQuery(Result.class);
		Root<Result> root = query.from(Result.class);
		query.select(root).where(builder.equal(root.get("number"), number));
        return manager.createQuery(query).getSingleResult();
	}

HomeController でDAOを利用する。

HomeController.java

	@RequestMapping(value = "/home", method = RequestMethod.POST)
	public String query(@RequestParam("number") String number, Model model) {
		model.addAttribute("title", "成績の検索結果");
		model.addAttribute("number", number);
		ResultDao dao = new ResultDaoImpl();
		Result r = dao.find(number);
		model.addAttribute("score", r.getScore());
		return "result";
	}

存在しない受験番号だったらエラー表示する。

DAOは、クエリで見つからないときはnullを返すようにする。

ResultDaoImple.java

	public Result find(String number) {
        EntityManager manager = factory.createEntityManager();
		CriteriaBuilder builder = manager.getCriteriaBuilder();
		CriteriaQuery<Result> query = builder.createQuery(Result.class);
		Root<Result> root = query.from(Result.class);
		query.select(root).where(builder.equal(root.get("number"), number));
		Result r = null;
		try {
			r = manager.createQuery(query).getSingleResult();
		} catch (NoResultException e) {
			//
		}
		return r;
	}

HomeControllerは結果がnullならメッセージを送信する。

HomeController.java

	@RequestMapping(value = "/home", method = RequestMethod.POST)
	public String query(@RequestParam("number") String number, Model model) {
		model.addAttribute("title", "成績の検索結果");
		model.addAttribute("number", number);
		ResultDao dao = new ResultDaoImpl();
		Result r = dao.find(number);
		if (r == null) {
			model.addAttribute("message", "存在しない受験番号です");
			model.addAttribute("score", "");
		} else {
			model.addAttribute("score", r.getScore());
		}
		return "result";
	}

コメントを残す

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