SpringBoot PostgreSQL+JDBCでselectするサンプル

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でループ処理が行われます。

関連の記事

Java PostgreSQLにJDBC接続してselectするサンプル

△上に戻る