Spring Boot + DB2 を使った CRUD ハンズオン
Spring Boot + DB2 を使った CRUD ハンズオンを、
初心者でもそのまま動かせる完全版としてまとめています。
ゴール
DB2 に USERS テーブルを作成
Spring Boot で CRUD(Create / Read / Update / Delete)を実装
REST API として動かす
DB2 特有の書き方にも対応
前提
Spring Boot 3.x(IntelliJ で OK)
DB2(LUW / Docker / IBM Cloud どれでも可)
JDBC または Spring Data JPA どちらでも可能
今回は Spring Data JPA で超簡単構築を採用。
【Step 0】DB2 にテーブルを作成
CREATE TABLE USERS (
USER_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
NAME VARCHAR(100) NOT NULL,
EMAIL VARCHAR(200) NOT NULL UNIQUE,
PHONE VARCHAR(20),
CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
【Step 1】Spring Initializr の設定
Dependencies:
Spring Web
Spring Data JPA
DB2 JDBC Driver(IBM DB2)
Lombok
※ DB2 Driver は "com.ibm.db2:jcc" を追加する。
【Step 2】build.gradle / pom.xml
▼ pom.xml(Maven の場合)
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>jcc</artifactId>
<version>11.5.8.0</version>
</dependency>
🍀【Step 3】application.properties
spring.datasource.url=jdbc:db2://localhost:50000/testdb
spring.datasource.username=db2inst1
spring.datasource.password=password
spring.datasource.driver-class-name=com.ibm.db2.jcc.DB2Driver
spring.jpa.database-platform=org.hibernate.dialect.DB2Dialect
spring.jpa.hibernate.ddl-auto=none # DBで事前に作成済
spring.jpa.show-sql=true
【Step 4】Entity(USERS)
package com.example.demo.entity;
import jakarta.persistence.*;
import lombok.Data;
@Data
@Entity
@Table(name = "USERS")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USER_ID")
private Integer id;
@Column(name = "NAME", nullable = false)
private String name;
@Column(name = "EMAIL", nullable = false, unique = true)
private String email;
@Column(name = "PHONE")
private String phone;
}
▶ DB2 の IDENTITY に対応するため GenerationType.IDENTITY を使用。
【Step 5】Repository(自動で CRUD を生成)
package com.example.demo.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.demo.entity.User;
public interface UserRepository extends JpaRepository<User, Integer> {
}
▶ これだけで
insert
select
update
delete
がすべて利用可能。
【Step 6】Service(任意)
package com.example.demo.service;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import java.util.List;
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository repo;
public List<User> findAll() {
return repo.findAll();
}
public User findById(Integer id) {
return repo.findById(id).orElse(null);
}
public User create(User user) {
return repo.save(user);
}
public User update(Integer id, User newUser) {
return repo.findById(id)
.map(user -> {
user.setName(newUser.getName());
user.setEmail(newUser.getEmail());
user.setPhone(newUser.getPhone());
return repo.save(user);
}).orElse(null);
}
public void delete(Integer id) {
repo.deleteById(id);
}
}
【Step 7】REST Controller(CRUD API)
package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {
private final UserService service;
@GetMapping
public List<User> getAll() {
return service.findAll();
}
@GetMapping("/{id}")
public User getOne(@PathVariable Integer id) {
return service.findById(id);
}
@PostMapping
public User create(@RequestBody User user) {
return service.create(user);
}
@PutMapping("/{id}")
public User update(@PathVariable Integer id, @RequestBody User user) {
return service.update(id, user);
}
@DeleteMapping("/{id}")
public void delete(@PathVariable Integer id) {
service.delete(id);
}
}
【Step 8】動作確認(curl / Postman)
▼ 全件取得
GET http://localhost:8080/api/users
▼ 新規登録
POST http://localhost:8080/api/users
Content-Type: application/json
{
"name": "Yamada Taro",
"email": "taro@example.com",
"phone": "090-1111-2222"
}
▼ 更新
PUT http://localhost:8080/api/users/1
Content-Type: application/json
{
"name": "Taro Updated",
"email": "taro2@example.com",
"phone": "090-0000-0000"
}
▼ 削除
DELETE http://localhost:8080/api/users/1
DB2 特有の注意点(Spring Boot)

