0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Spring Frameworkを使ってみる(7)

Last updated at Posted at 2020-06-10

# おさらい

  • テーブル結合して取得する方法

準備

## テーブルの再作成
まずは、前回まで使用していたテーブルをいったん削除して下記のテーブル作成スクリプトを実行します。

CREATE TABLE department (
id INTEGER PRIMARY KEY,
name VARCHAR(40)
);
CREATE TABLE user (
id INTEGER PRIMARY KEY,
name VARCHAR(40),
department_id INTEGER,
FOREIGN KEY (department_id)
REFERENCES department (id)
);

テーブルにデータ挿入

INSERT INTO department (id,name)
VALUES (1,'人事部');
 
INSERT INTO department (id,name)
VALUES (2,'営業部');
 
INSERT INTO user (id,name,department_id)
VALUES (1,'田中',1);
 
INSERT INTO user (id,name,department_id)
VALUES (2,'佐藤',1);
 
INSERT INTO user (id,name,department_id)
VALUES (3,'鈴木',2);

モデルの削除

前回の記事で作成したモデルを削除します。
image.png

JPAを使用してモデル作成

モデルの作成
前々回と同様にJPAを使用してモデルを作成していきます。
「model」パッケージを右クリック⇒「New」⇒「other…」を選択します。
image.png

[Next]を押下します。
image.png

[Next]を押下します。次の画面の[Package]欄に実際のPackageパスを正しく入力してください。
image.png

[Finish]を押下します。
image.png

出力内容の変更

ログイン後に前回出力した名前だけでなく、部署名を出力していきます。

LoginController.java
package com.example.HelloWorld;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.List;

import com.example.HelloWorld.model.User;
import com.example.HelloWorld.repository.UserRepository;
import com.example.HelloWorld.validation.CheckOrder;
 
@Controller
public class LoginController {
//    @Autowired
////    UserService userService;
	@Autowired
	private UserRepository userRep;
	
	
	@RequestMapping(value = "/login", method = RequestMethod.POST)
		public String login(Model model, @Validated(CheckOrder.class) @ModelAttribute("loginForm") LoginForm loginForm, BindingResult result) {
			if(result.hasErrors()) {
				return "index";
			}
			
			List<User> userList = userRep.findById(loginForm.getUserId());
				if(userList.size() > 0) {
					model.addAttribute("userName", userList.get(0).getName());
					model.addAttribute("departmentName", userList.get(0).getDepartment().getName());
						return "top";
				} else {
						return "index";
					}
			}
}

top.jspの編集

設定した部署名を画面に出力します。
top.jspを下記のように変更します。

top.jsp
<!DOCTYPE html>
 
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
 
<html>
	<head>
		<meta charset="utf-8">
		<title>トップ</title>
	</head>
	<body>
		ようこそ<c:out value="${departmentName}" /><c:out value="${userName}" />さん
	</body>
</html>

実行結果

実行
ユーザIDに「2」を入力します。「ログイン」を押下します。
image.png

image.png

tips

index.jspのパスワードのinput type="password"にすれば、パスワードは入力時に隠されます。

## 参考したリンク
https://tech.pjin.jp/blog/2016/06/16/springframework10/

## 次回
次回はSpring securityを用いたユーザ認証を紹介します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?