상세 컨텐츠

본문 제목

스프링부트와 MyBatis를 이용한 CRUD 프로젝트

Spring(프레임워크)

by 헬로제이콥 2025. 1. 17. 15:47

본문

스프링부트 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 프로젝트가 완성됩니다.

관련글 더보기