😽

SpringBootでH2DB利用

2023/07/12に公開

SpringBootでH2DBから値を引き出すページを作れたのでアウトプット
♦H2DBとは・・・
インメモリ型データベースという全てのデータをメモリ上に持つデータベースのこと。
再起動で消えるのでテストや学習に向いている。

コンソール

http://localhost:8080/h2-console

HTML

hello.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta>
	<meta charset="UTF-8"></meta>
	<title>Hello world</title>
</head>
<body>
	<h1>Hello World</h1>
	<form method="post" action="/hello">
		入力:<input type="text" name="text1"/>
		<input type="submit" value="クリック"/>
	</form>
	<br/>
	<form method="post" action="/hello/db">
		従業員ID:<input typ="text" name="text2" th:value="${text2_value}"/>
		<input type="submit" value="クリック" />
	</form>
</body>
</html>
db.html
<!DOCTYPE>
<html xmlns:th="http://www.thymeleaf.org">
<meta>
	<meta charset="UTF-8"></meta>
	<title>ResonseSample</title>
</head>
<body>
	<h1>HelloResponseDB</h1>
	<table>
		<tr>
			<td>ID:</td>
			<td th:text="${employee.employeeId}"></td>
		</tr>
		<tr>
			<td>名前:</td>
			<td th:text="${employee.employeeName}"></td>
		</tr>
		<tr>
			<td>年齢:</td>
			<td th:text="${employee.employeeAge}"></td>
		</tr>
	</table>
</body>
</html>
response.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
	<meta charset="UTF-8"></meta>
	<title>ResponseSample</title>
</head>
<body>
	<h1>HelloResuponse</h1>
	<!-- 受け取った文字を表示する -->
	<p th:text="${sample}"></p>
</body>
</html>

DB

application.properties
#DataSource
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.sql-script-encoding=UTF-8
spring.datasource.initialize=true
spring.datasource.schema=classpath:schema.sql
spring.datasource.data=classpath:data.sql

#H2DB
spring.h2.console.enabled=true

SQL

schema.sql
CREATE TABLE IF NOT EXISTS employee (
id VARCHAR(50)PRIMARY KEY,
name VARCHAR(50),
age INT
);
HelloService.java
package com.example.demo.hello;

import java.util.Map;

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

@Service
public class HelloService {
	@Autowired
	private HelloRepository repository;
	
	/**従業員を1人取得する*/
	public Employee getEmployee(String id) {
		// 検索
		Map<String, Object>map = repository.findById(id);
		
		// Mapから値を取得
		String employeeId = (String)map.get("id");
		String name = (String)map.get("name");
		int age = (Integer)map.get("age");
		
		// Employeeクラスに値をセット
		Employee employee = new Employee();
		employee.setEmployeeId(employeeId);
		employee.setEmployeeName(name);
		employee.setEmployeeAge(age);
		
		return employee;
	}
}
data.sql
INSERT INTO employee(id,name,age)
VALUES('1','Tom',30);
HelloRepository.java
package com.example.demo.hello;

import java.util.Map;

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

@Repository
public class HelloRepository {

	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	public Map<String, Object>findById(String id){
		
		// SELECT文
		String query = "SELECT * "
		+ "FROM employee "
		+ "WHERE id =?";
		
	// 検索実行
		Map<String, Object> employee = jdbcTemplate.queryForMap(query, id);
	return employee;
	}
}

コントローラー

HelloController.java
package com.example.demo.hello;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.ui.Model;

@Controller
public class HelloController {

	@Autowired
	private HelloService service;
	
	
	@GetMapping("/hello")
	public String getHello() {
		//hello.htmlに画面遷移
		return "hello";
	}
	
	@PostMapping("/hello")
	public String postRequest(@RequestParam("text1")String str, Model model) {
		//画面から受け取った文字列をModelに登録
		model.addAttribute("sample", str);
		
		//response.htmlに画面遷移
		return "hello/response";
	}
	
	@PostMapping("/hello/db")
	public String postDbRequest(@RequestParam("text2")String id, Model model) {
		// 1件検索
		Employee employee = service.getEmployee(id);
		
		// 検索結果をModelに登録
		model.addAttribute("employee", employee);
		
		// db.htmlに画面遷移
		return "hello/db";
	}
}

メインメソッド

DemoApplication.java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

※記事の質が低すぎますがまずは投稿回数を増やしていくことを意識します。

Discussion