Spring BootとJDBCでPostgreSQLをselectするサンプルです。
(確認環境:Spring Boot 2.5,JDK 11,STS 4)
目次
サンプル | Spring BootとJDBCでPostgreSQLをselectする |
1.pom.xmlの設定 | |
2.application.propertiesの設定 | |
3.DTOのクラス(SyainDto.java) | |
4.レポジトリのクラス(SyainRepository.java) | |
5.コントローラのクラス(MainController.java) | |
6.ビューのファイル(index.html) |
Spring BootとJDBCでPostgreSQLをselectする
以下のURLにアクセスするとPostgreSQLから値を取得しindex.htmlに値を表示します。
http://localhost:8765/test1
githubにコードがあります。
https://github.com/ut23405/springbootdb/tree/main/springboot-jdbc-postgresql
1.pom.xmlの設定
pom.xmlの設定です。以下をdependenciesの中に追加します。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
</dependencies>
4行目は、JdbcTemplate等で必要です。
9行目は、PostgreSQLのドライバです。
2.application.propertiesの設定
application.propertiesにDB情報を記述しています。
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/testdb10
spring.datasource.username=postgres
spring.datasource.password=postgres
server.port = 8765
1行目のtestdb10はデータベース名です。ポート番号はPostgreSQLで使用している値を指定します。
3.DTOのクラス(SyainDto.java)
DTOのクラスです。Syainテーブルのデータを格納します。
package com.example.test1;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class SyainDto {
private int id;
private String name;
private String romaji;
private Date createdAt;
private Date updatedAt;
}
7,8行目は、lombokのアノテーションです。
@Dataは、getterとsetterの記述を省略できます。
@AllArgsConstructorは、全項目のコンストラクタを生成します。
13,14行目は、Date型です。PostgreSQLの列のデータ型はTIMESTAMP型です。
4.レポジトリのクラス(SyainRepository.java)
レポジトリのクラスです。SQLを実行します。
package com.example.test1.repository;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import com.example.test1.SyainDto;
import lombok.RequiredArgsConstructor;
@Repository
@RequiredArgsConstructor
public class SyainRepository {
private final JdbcTemplate jdbcTemplate;
public List<SyainDto> getAll() {
String sql = "select id,name,romaji,created_at,updated_at from syain";
List<Map<String, Object>> syainList = jdbcTemplate.queryForList(sql);
List<SyainDto> list = new ArrayList<>();
for (Map<String, Object> syain : syainList) {
list.add(new SyainDto(
(int) syain.get("id"),
(String) syain.get("name"),
(String) syain.get("romaji"),
(Date) syain.get("created_at"),
(Date) syain.get("updated_at")));
}
return list;
}
}
18行目は、select文です。
19行目は、JDBCでSQLを実行してデータを取得しています。
queryForListの戻りの型は、List<Map<String, Object>>です。
21行目からは、1行のデータを1インスタンスとしてリストにセットしています。
5.コントローラのクラス(MainController.java)
package com.example.test1;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import com.example.test1.repository.SyainRepository;
import lombok.RequiredArgsConstructor;
@Controller
@RequiredArgsConstructor
public class MainController {
private final SyainRepository syainRepository;
@GetMapping("/test1")
public String write1(Model model) {
List<SyainDto> list = syainRepository.getAll();
model.addAttribute("SyainList",list);
return "test1/index";
}
}
17行目は、SyainRepositoryクラスのメソッドからデータを取得します。
18行目は、modelにキーと値をセットしています。ビューの読み出しで使用します。
19行目は、test1フォルダのindexファイルを表示します。
6.ビューのファイル(index.html)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
<title>check</title>
</head>
<body>
<table>
<tr>
<th>id</th>
<th>name</th>
<th>romaji</th>
<th>createdAt</th>
<th>updatedAt</th>
</tr>
<tr th:each="list : ${SyainList}">
<td th:text="${list.id}"></td>
<td th:text="${list.name}"></td>
<td th:text="${list.romaji}"></td>
<td th:text="${list.createdAt}"></td>
<td th:text="${list.updatedAt}"></td>
</tr>
</table>
</body>
</html>
16行目のSyainListは、コントローラで設定した値とひも付きます。th:eachでループ処理が行われます。
関連の記事