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