스프링부트 2.7.12 , mybatis, ,메이븐, db는H2, id,학번,이름,전화번호,주소 를 가지고 있어요 rest-api를 이용해 CRUD
1. 프로젝트 구조
우선, 스프링부트 프로젝트의 기본 구조는 다음과 같습니다.
src
└── main
├── java
│ └── com
│ └── example
│ └── demo
│ ├── DemoApplication.java
│ ├── controller
│ │ └── StudentController.java
│ ├── dto
│ │ └── StudentDto.java
│ ├── mapper
│ │ └── StudentMapper.java
│ └── service
│ └── StudentService.java
└── resources
├── application.properties
└── mapper
└── StudentMapper.xml
2. 의존성 추가
pom.xml 파일에 필요한 의존성을 추가합니다.
xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3. H2 데이터베이스 설정
src/main/resources/application.properties 파일에 H2 데이터베이스 설정을 추가합니다.
properties
# H2 데이터베이스 설정
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
mybatis.mapper-locations=classpath:mapper/*.xml
4. DTO 클래스
StudentDto.java 파일을 생성하여 학생 정보를 담는 DTO(Data Transfer Object)를 만듭니다.
java
package com.example.demo.dto;
import lombok.Data;
@Data // Lombok을 사용하여 getter, setter 생성
public class StudentDto {
private Long id; // 학생 ID
private String studentNumber; // 학번
private String name; // 이름
private String phone; // 전화번호
private String address; // 주소
}
5. Mapper 인터페이스
StudentMapper.java 파일을 생성하여 데이터베이스와의 상호작용을 정의합니다.
java
package cohttp://m.example.demo.mapper;
import cohttp://m.example.demo.dto.StudentDto;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper // MyBatis의 Mapper로 인식
public interface StudentMapper {
@Select("SELECT * FROM student")
List<StudentDto> findAll(); // 모든 학생 조회
@Select("SELECT * FROM student WHERE id = #{id}")
StudentDto findById(Long id); // ID로 학생 조회
@Insert("INSERT INTO student(student_number, name, phone, address) VALUES(#{studentNumber}, #{name}, #{phone}, #{address})")
void insert(StudentDto student); // 학생 추가
@Update("UPDATE student SET student_number=#{studentNumber}, name=#{name}, phone=#{phone}, address=#{address} WHERE id=#{id}")
void update(StudentDto student); // 학생 수정
@Delete("DELETE FROM student WHERE id = #{id}")
void delete(Long id); // 학생 삭제
}
6. 서비스 클래스
StudentService.java 파일을 생성하여 비즈니스 로직을 구현합니다.
java
package cohttp://m.example.demo.service;
import cohttp://m.example.demo.dto.StudentDto;
import cohttp://m.example.demo.mapper.StudentMapper;
import org.springframework.stereotype.Service;
import java.util.List;
@Service // 서비스 클래스로 인식
public class StudentService {
private final StudentMapper studentMapper;
public StudentService(StudentMapper studentMapper) {
this.studentMapper = studentMapper;
}
public List<StudentDto> findAll() {
return studentMapper.findAll(); // 모든 학생 조회
}
public StudentDto findById(Long id) {
return studentMapper.findById(id); // ID로 학생 조회
}
public void insert(StudentDto student) {
studentMapper.insert(student); // 학생 추가
}
public void update(StudentDto student) {
studentMapper.update(student); // 학생 수정
}
public void delete(Long id) {
studentMapper.delete(id); // 학생 삭제
}
}
7. 컨트롤러 클래스
StudentController.java 파일을 생성하여 REST API를 구현합니다.
java
package cohttp://m.example.demo.controller;
import cohttp://m.example.demo.dto.StudentDto;
import cohttp://m.example.demo.service.StudentService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController // REST API 컨트롤러로 인식
@RequestMapping("/students") // 요청 URL 경로
public class StudentController {
private final StudentService studentService;
public StudentController(StudentService studentService) {
this.studentService = studentService;
}
@GetMapping // 모든 학생 조회
public List<StudentDto> getAllStudents() {
return studentService.findAll();
}
@GetMapping("/{id}") // ID로 학생 조회
public ResponseEntity<StudentDto> getStudentById(@PathVariable Long id) {
StudentDto student = studentService.findById(id);
return student != null ? ResponseEntity.ok(student) : ResponseEntity.notFound().build();
}
@PostMapping // 학생 추가
public ResponseEntity<Void> createStudent(@RequestBody StudentDto student) {
studentService.insert(student);
return ResponseEntity.status(HttpStatus.CREATED).build();
}
@PutMapping("/{id}") // 학생 수정
public ResponseEntity<Void> updateStudent(@PathVariable Long id, @RequestBody StudentDto student) {
student.setId(id); // ID를 설정
studentService.update(student);
return ResponseEntity.ok().build();
}
@DeleteMapping("/{id}") // 학생 삭제
public ResponseEntity<Void> deleteStudent(@PathVariable Long id) {
studentService.delete(id);
return ResponseEntity.noContent().build();
}
}
8. 데이터베이스 테이블 생성
H2 데이터베이스에서 사용할 테이블을 생성해야 합니다. 이를 위해 H2 콘솔에 접속하여 다음 SQL 쿼리를 실행합니다.
sql
CREATE TABLE student (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
student_number VARCHAR(50),
name VARCHAR(50),
phone VARCHAR(50),
address VARCHAR(100)
);
9. 애플리케이션 실행
이제 모든 설정이 완료되었습니다. DemoApplication.java 파일을 실행하여 애플리케이션을 시작할 수 있습니다. REST API 엔드포인트에 접근하여 CRUD 작업을 수행할 수 있습니다.
10. 테스트
Postman 또는 다른 HTTP 클라이언트를 사용하여 API를 테스트할 수 있습니다.
GET /students : 모든 학생 조회
GET /students/{id} : ID로 학생 조회
POST /students : 새로운 학생 추가
PUT /students/{id} : 학생 정보 수정
DELETE /students/{id} : 학생 삭제
이렇게 하면 스프링부트와 MyBatis를 이용한 CRUD 프로젝트가 완성됩니다.
프로젝트 목표: 스프링 부트, MyBatis를 이용하여 학생 정보를 CRUD(Create, Read, Update, Delete) 할 수 있는 REST API를 구현합니다. (0) | 2025.01.17 |
---|---|
MyBatis에서 매퍼 XML과 주석 기반 구성의 차이점 (0) | 2025.01.17 |
API, JPA, MyBatis: 언제 어떤 것을 사용해야 할까요? (2) | 2025.01.17 |
스프링 MVC를 이용한 API 개발: 주요 어노테이션 (0) | 2025.01.17 |
JSON 데이터 형식과 Jackson 라이브러리 (0) | 2025.01.17 |