■概要
作成する機能の概要は以下の通り。
- DB検索結果取得(今回は、対象テーブルの全てのデータ)
- 取得した値をREST機能で返却する
JavaとSpring Bootのバージョンは以下の通り
項目 | バージョン |
---|---|
JAVA | 17 |
Spring Boot | 3.3.3 |
■DBの定義と値
取得する対象のテーブル名は「商品情報マスタテーブル:M_PRODUCT_INFORMATION」とし、以下にテーブル定義および設定値を示す。
▼テーブル定義
論理名 | 物理名 | 型 | Key |
---|---|---|---|
商品コード | product_code | VARCHAR(4) | PRIMARY KEY |
商品名 | product_name | VARCHAR(50) | |
金額 | amount | INT |
・ソース
-- 商品情報マスタテーブル
CREATE TABLE IF NOT EXISTS M_PRODUCT_INFORMATION(
product_code VARCHAR(4) PRIMARY KEY,
product_name VARCHAR(50),
amount INT
);
▼テーブルの設定値
商品コード | 商品名 | 金額 |
---|---|---|
0001 | 商品A | 100 |
0002 | 商品B | 120 |
0003 | 商品C | 130 |
0004 | 商品D | 160 |
0005 | 商品E | 110 |
0006 | 商品F | 140 |
0007 | 商品G | 170 |
0008 | 商品H | 190 |
0009 | 商品I | 200 |
0010 | 商品J | 80 |
・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;
}
コメント