Mybatis/실전 프로젝트 예제

REST API와 MyBatis 연동

DEVLIB 2025. 4. 17. 10:17
728x90

REST API + MyBatis 연동 구조

Spring Boot에서는 REST 컨트롤러를 통해 API 요청을 받고, MyBatis를 통해 DB와 연결된 Mapper를 사용하여 데이터를 처리합니다.

기본 계층 구조

Controller → Service → Mapper(MyBatis) → DB

예시: 사용자(User) CRUD REST API + MyBatis


1. User 엔티티 클래스

public class User {
    private Long id;
    private String name;
    private String email;
    private LocalDateTime createdAt;
}

2. Mapper 인터페이스 (UserMapper.java)

@Mapper
public interface UserMapper {
    List<User> findAll();
    User findById(Long id);
    void insert(User user);
    void update(User user);
    void delete(Long id);
}

3. Mapper XML (UserMapper.xml)

<mapper namespace="com.example.user.mapper.UserMapper">

  <select id="findAll" resultType="User">
    SELECT * FROM users
  </select>

  <select id="findById" parameterType="long" resultType="User">
    SELECT * FROM users WHERE id = #{id}
  </select>

  <insert id="insert" parameterType="User">
    INSERT INTO users (name, email, created_at)
    VALUES (#{name}, #{email}, NOW())
  </insert>

  <update id="update" parameterType="User">
    UPDATE users
    SET name = #{name}, email = #{email}
    WHERE id = #{id}
  </update>

  <delete id="delete" parameterType="long">
    DELETE FROM users WHERE id = #{id}
  </delete>

</mapper>

4. 서비스 클래스 (UserService.java)

@Service
@RequiredArgsConstructor
public class UserService {
    private final UserMapper userMapper;

    public List<User> getAllUsers() {
        return userMapper.findAll();
    }

    public User getUser(Long id) {
        return userMapper.findById(id);
    }

    public void createUser(User user) {
        userMapper.insert(user);
    }

    public void updateUser(User user) {
        userMapper.update(user);
    }

    public void deleteUser(Long id) {
        userMapper.delete(id);
    }
}

5. REST API 컨트롤러 (UserController.java)

@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

    @GetMapping
    public List<User> list() {
        return userService.getAllUsers();
    }

    @GetMapping("/{id}")
    public User detail(@PathVariable Long id) {
        return userService.getUser(id);
    }

    @PostMapping
    public void create(@RequestBody User user) {
        userService.createUser(user);
    }

    @PutMapping("/{id}")
    public void update(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        userService.updateUser(user);
    }

    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}

요청-응답 흐름 요약

  1. 클라이언트가 POST /api/users로 사용자 등록 요청
  2. Controller → Service → UserMapper.insert() 호출
  3. MyBatis가 SQL 실행 → DB에 데이터 저장
  4. 클라이언트에게 성공 응답 (200 OK, 201 Created 등)

실전 팁

상황
JSON 요청 바디 자동 매핑 @RequestBody 활용
경로 변수 사용 @PathVariable로 ID 처리
반환 타입 지정 ResponseEntity, DTO 사용도 가능
에러 처리 @ExceptionHandler, @ControllerAdvice

마무리 요약

계층 설명
Controller REST 요청/응답 처리
Service 비즈니스 로직 + 트랜잭션 처리
Mapper SQL 호출
XML SQL 정의 (select, insert, update, delete)

응용 예제

  • 게시판 API (/api/posts)
  • 상품 목록 검색 (/api/products?keyword=아이폰)
  • 페이징 & 정렬 API (/api/users?page=2&sort=email)
LIST