前提条件
Microsoft SQL ServerとEclipsがダウンロードされていること。
Microsoft SQL Serverのダウンロードと設定方法はこちらとなります。
Microsoft SQL Serverのバックアップファイルをダウンロード
Microsoft SQL ServerのバックアップファイルをダウンロードしてDBを復元します。
公式サイトにアクセスしてOLTPデータのAdventureWorks2019.bakをダウンロードします。
データベースを復元
SQL Server Management Studio Management Studio 19にログイン後、データベースを復元していきます。
データベースを右クリック → データベースの復元(R)を押下
先ほどダウンロードしたバックアップファイルをデバイスから追加します。
デバイス(E) → …をクリック
追加(A)を押下
さきほどダウンロードしたバックアップファイルを選択してOKボタンを押すと復元が開始されます
復元完了
復元されたかの確認を行う。
Spring Boot プロジェクトを作成
Eclipsを立ち上げます。
ファイル(F) → 新規(N) →プロジェクト(R)をクリック
Spring スターター・プロジェクトを選択
以下を入力
名前:spring_sqlserver_jpa
Java バージョン:11
パッケージ:com.example.spring_sqlserver_jpa
依存関係を選択します。
- Spring Data JPA
- MS SQL Server Driver
- Thymeleaf
- Spring Web
プロジェクトの作成完了
build.gradle
dependenciesに先設定した依存関係が追加されています。
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.8'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.microsoft.sqlserver:mssql-jdbc'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
データベースから値を取得して画面に表示する
ApplicationProperties
DBにアクセスするためプロパティファイルに以下を記入
spring.datasource.url=jdbc:sqlserver://localhost:53403;databaseName=AdventureWorks2019;encrypt=false;
spring.datasource.username=sa
spring.datasource.password=tokuty2023@
SQL Serverのポート番号
ポート番号はSql Server Configuration Managerを立ち上げて確認します。
DepartmentController.java
@Autowired DepartmentService departmentService;
@Autowiredを使用することでDepartmentServiceをインスタンス化して全件取得メソッドを呼び出しています。
model.addAttribute("departmentList", departmentList);
全件取得したデータを画面側で表示させるため、modelに登録します。
package com.example.spring_sqlserver_jpa;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DpartmentController {
@Autowired DepartmentService departmentService;
@RequestMapping("/")
public String index(Model model) {
List<Department> departmentList = departmentService.findAllDepartment();
model.addAttribute("departmentList", departmentList);
return "index";
}
}
Department.java
DBから取得した値をモデルに格納していきます。
package com.example.spring_sqlserver_jpa;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="Department", schema="Humanresources")
public class Department {
@Id
private Short departmentID;
private String name;
@Column(name = "groupname")
private String groupName;
@Column(name = "modifieddate")
private Date modifiedDate;
public Short getDepartmentID() {
return departmentID;
}
public void setDepartmentID(Short departmentID) {
this.departmentID = departmentID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public Date getModifiedDate() {
return modifiedDate;
}
public void setModifiedDate(Date modifiedDate) {
this.modifiedDate = modifiedDate;
}
}
DepartmentRepository.java
@Repository
public interface DepartmentRepository extends JpaRepository <Department, Integer>{
}
JpaRepositoryを継承することでJpaにて実装された機能を使うことができるようになります。
今回データを全件取得するfindAll()メソッドを使います。
package com.example.spring_sqlserver_jpa;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface DepartmentRepository extends JpaRepository <Department, Integer>{
}
DeprartmentService.java
findAll()メソッドを使うことでデータを全件取得しています。
package com.example.spring_sqlserver_jpa;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DepartmentService {
@Autowired
DepartmentRepository departmentRepository;
public List<Department> findAllDepartment() {
return departmentRepository.findAll();
}
}
index.html
DepartmentController.javaでmodelに登録したdepartmentsをテンプレートエンジンの機能であるth:eachを使用して画面に一覧表示します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Demo</title>
</head>
<body>
<table>
<tr th:each="departments : ${departmentList}" th:object="${departments}">
<td th:text="*{departmentID}"></td>
<td th:text="*{name}"></td>
<td th:text="*{groupName}"></td>
<td th:text="*{modifiedDate}"></td>
</tr>
</table>
</body>
</html>
Spring Boot Appの実行
作成したspring_sqlserver_jpaを実行していきます。
作成したプロジェクト(demo)を右クリックして「実行」 → 「Spring Boot App」を押下
ブラウザのURL欄に「http://localhost:8080/」を入力
データベースにアクセスしてテーブルから取得した値の表示ができました!
最終的な構成
必要な部分のみに省略しています。
spring_sqlserver_jpa
└─src
├─main
├─java
│ └─com
│ └─example
│ └─demo
│ springSqlserverJpaApplication.java
│ DepartmentController.java
│ Department.java
│ DepartmentRepository.java
│ DepartmentService.java
│
└─resources
│ application.properties
│
├─static
└─templates
index.html
今回学んだこと
SQL Serverでのデータ復元方法
Spring Boot + SQL Server + JPAでのデータ呼び出し