【Java】Spring:DBの検索結果を取得する

■概要

作成する機能の概要は以下の通り。

  • DB検索結果取得(今回は、対象テーブルの全てのデータ)
  • 取得した値をREST機能で返却する

JavaとSpring Bootのバージョンは以下の通り

項目バージョン
JAVA17
Spring Boot3.3.3

■DBの定義と値

取得する対象のテーブル名は「商品情報マスタテーブル:M_PRODUCT_INFORMATION」とし、以下にテーブル定義および設定値を示す。

▼テーブル定義

論理名物理名Key
商品コードproduct_codeVARCHAR(4)PRIMARY KEY
商品名product_nameVARCHAR(50)
金額amountINT

・ソース

-- 商品情報マスタテーブル
CREATE TABLE IF NOT EXISTS M_PRODUCT_INFORMATION(
	product_code VARCHAR(4) PRIMARY KEY,
	product_name VARCHAR(50),
	amount INT
);

▼テーブルの設定値

商品コード商品名金額
0001商品A100
0002商品B120
0003商品C130
0004商品D160
0005商品E110
0006商品F140
0007商品G170
0008商品H190
0009商品I200
0010商品J80

・INSRT文

INSERT INTO M_PRODUCT_INFORMATION(product_code, product_name, amount) VALUES('0001', '商品A', 100);
INSERT INTO M_PRODUCT_INFORMATION(product_code, product_name, amount) VALUES('0002', '商品B', 120);
INSERT INTO M_PRODUCT_INFORMATION(product_code, product_name, amount) VALUES('0003', '商品C', 130);
INSERT INTO M_PRODUCT_INFORMATION(product_code, product_name, amount) VALUES('0004', '商品D', 160);
INSERT INTO M_PRODUCT_INFORMATION(product_code, product_name, amount) VALUES('0005', '商品E', 110);
INSERT INTO M_PRODUCT_INFORMATION(product_code, product_name, amount) VALUES('0006', '商品F', 140);
INSERT INTO M_PRODUCT_INFORMATION(product_code, product_name, amount) VALUES('0007', '商品G', 170);
INSERT INTO M_PRODUCT_INFORMATION(product_code, product_name, amount) VALUES('0008', '商品H', 190);
INSERT INTO M_PRODUCT_INFORMATION(product_code, product_name, amount) VALUES('0009', '商品I', 200);
INSERT INTO M_PRODUCT_INFORMATION(product_code, product_name, amount) VALUES('0010', '商品J', 80);

■出力値

・出力値(「http://localhost:8080/rest/get」アクセス時)の想定を以下に示す。

[{"productCode":"0001","productName":"商品A","amount":100},{"productCode":"0002","productName":"商品B","amount":120},{"productCode":"0003","productName":"商品C","amount":130},{"productCode":"0004","productName":"商品D","amount":160},{"productCode":"0005","productName":"商品E","amount":110},{"productCode":"0006","productName":"商品F","amount":140},{"productCode":"0007","productName":"商品G","amount":170},{"productCode":"0008","productName":"商品H","amount":190},{"productCode":"0009","productName":"商品I","amount":200},{"productCode":"0010","productName":"商品J","amount":80}]

■モジュールの階層構造

今回作成する、「rest-api-select-all」プロジェクトの階層構造は以下の通り。

■クラス図

今回作成するモジュールのクラス図を以下に示す。

■サンプルコード

・PruductInfoRestController.java

package com.example.demo.controlller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.service.RestService;
import com.example.model.ProductInfo;

@RestController
public class PruductInfoRestController {

	@Autowired
	RestService service;

	// 全件取得
	@GetMapping("/rest/get")
	public List<ProductInfo> getUserMany() {
		// 全件取得
		return service.selectAll();
	}

}

・RestService.java

package com.example.demo.service;

import java.util.List;

import com.example.model.ProductInfo;

public interface RestService {

	// 全件取得
	public List<ProductInfo> selectAll();

}

・RestServiceJdbcImpl.java

package com.example.demo.service.jdbc;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.repository.ProductInfoDao;
import com.example.demo.service.RestService;
import com.example.model.ProductInfo;

import jakarta.transaction.Transactional;

@Transactional
@Service
public class RestServiceJdbcImpl implements RestService {

	@Autowired
	ProductInfoDao productInfoDao;

	@Override
	public List<ProductInfo> selectAll() {
		return productInfoDao.selectAll();

	}

}

・ProductInfoDao.java

package com.example.demo.repository;

import java.util.List;

import org.springframework.dao.DataAccessException;

import com.example.model.ProductInfo;

public interface ProductInfoDao {

	// 商品情報マスタテーブル全件を取得
	public List<ProductInfo> selectAll() throws DataAccessException;

}

・ProductInfoDaoJdbcImpl.java

package com.example.demo.repository.jdbc;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import com.example.demo.repository.ProductInfoDao;
import com.example.model.ProductInfo;

@Repository
public class ProductInfoDaoJdbcImpl implements ProductInfoDao {

	@Autowired
	JdbcTemplate jdbc;

	// 全件検索用SQL
	private static final String SELECT_ALL_SQL_STRING = "SELECT * FROM M_PRODUCT_INFORMATION";

	@Override
	public List<ProductInfo> selectAll() throws DataAccessException {

		// 全件取得
		final List<Map<String, Object>> allData = jdbc.queryForList(SELECT_ALL_SQL_STRING);

		// 結果返却用変数
		final List<ProductInfo> productInfoList = new ArrayList<>();

		// 取得したデータ件数分繰り返し
		for (Map<String, Object> map : allData) {

			ProductInfo productInfo = new ProductInfo();

			// 商品コード
			productInfo.setProductCode((String) map.get("product_code"));

			// 商品名
			productInfo.setProductName((String) map.get("product_name"));

			// 金額
			productInfo.setAmount((Integer) map.get("amount"));

			// 返却用リストに詰め替る
			productInfoList.add(productInfo);
		}

		return productInfoList;

	}

}

・ProductInfo.java

package com.example.model;

import lombok.Data;

@Data
public class ProductInfo {
	// 商品コード
	private String productCode;

	// 商品名
	private String productName;

	// 金額
	private int amount;
}

■実行結果

タイトルとURLをコピーしました