Spring Frameworkを使ってみる（７）

#　おさらい
- テーブル結合して取得する方法

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

```sql
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)
);
```
---

## テーブルにデータ挿入
```sql
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399736/406b1b5c-a9cb-a9b6-754c-e67fb6164138.png)

## JPAを使用してモデル作成
モデルの作成
前々回と同様にJPAを使用してモデルを作成していきます。
「model」パッケージを右クリック⇒「New」⇒「other…」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399736/f3b4846b-4509-c5d2-58bc-c955b882ddc0.png)


[Next]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399736/d3b4bbf0-1470-d2a5-d27c-7adacc6b784e.png)


[Next]を押下します。次の画面の[Package]欄に実際のPackageパスを正しく入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399736/f4ce426f-5bf3-19b0-8fae-aebce5613d9d.png)


[Finish]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399736/5ced5491-b8df-2db7-92e7-77526f41636a.png)

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

```java: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を下記のように変更します。

```html: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399736/78281ece-4053-f259-8d0d-ddf11ab90152.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399736/a8bc70d9-a193-bf0a-1b44-cce26e5a27b7.png)


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

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

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