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);
}
}
요청-응답 흐름 요약
- 클라이언트가 POST /api/users로 사용자 등록 요청
- Controller → Service → UserMapper.insert() 호출
- MyBatis가 SQL 실행 → DB에 데이터 저장
- 클라이언트에게 성공 응답 (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