[Springfolio] 3편 - MyBatis 설정

Jlee7362·2025년 8월 8일

0. 목표

  • DB 연결 (MySQL).
  • MyBatis 매퍼 설정.
  • /usr/article/list 페이지에서 표 출력.

1. pom.xml 의존성 추가

  • MyBatis + MySQL 드라이버 추가.
  • (이제 DB를 쓰므로 2편에서 넣었던 exclude는 곧 제거함)
<dependencies>
  <!-- Web/JSP/JSTL/Lombok (이전 그대로) -->

  <!-- MyBatis -->
  <dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.5</version>
  </dependency>

  <!-- MySQL -->
  <dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
  </dependency>
</dependencies>

2. application.yml 수정

  • 중요: 2편의 DataSourceAutoConfiguration 제외 제거.

  • 뷰 리졸버는 유지.

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/springfolio?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul
    username: root
    password: ""   # 비번 있으면 입력

  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp

mybatis:
  type-aliases-package: com.example.demo.vo
  mapper-locations: classpath:mappers/**/*.xml


3. DB 테이블 만들기 (SQL)

DROP DATABASE IF EXISTS springfolio;
CREATE DATABASE springfolio;
USE springfolio;

CREATE TABLE article (
  id INT PRIMARY KEY AUTO_INCREMENT,
  regDate DATETIME DEFAULT CURRENT_TIMESTAMP,
  title VARCHAR(200) NOT NULL,
  memberId INT NOT NULL
);

INSERT INTO article (title, memberId) VALUES
('제목1', 1), ('제목2', 2), ('제목3', 3);



4. 패키지/클래스 만들기

  • 기준 패키지: com.example.demo

  • 경로:

    • vo/Article.java

    • repository/ArticleRepository.java

    • mappers/ArticleMapper.xml (resources)

    • controller/ArticleController.java

4-1) VO

package com.example.demo.vo;

import lombok.Data;

@Data
public class Article {
  private int id;
  private String regDate;
  private String title;
  private int memberId;
}

4-2) Repository (MyBatis Mapper 인터페이스)

package com.example.demo.repository;

import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.example.demo.vo.Article;

@Mapper
public interface ArticleRepository {
  List<Article> getArticles();
}

4-3) Mapper XML (src/main/resources/mappers/ArticleMapper.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.repository.ArticleRepository">
  <select id="getArticles" resultType="com.example.demo.vo.Article">
    SELECT id, regDate, title, memberId
    FROM article
    ORDER BY id DESC
  </select>
</mapper>


5. 컨트롤러

package com.example.demo.controller;

import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.demo.repository.ArticleRepository;
import com.example.demo.vo.Article;
import lombok.RequiredArgsConstructor;

@Controller
@RequiredArgsConstructor
public class ArticleController {

  private final ArticleRepository articleRepository;

  @RequestMapping("/usr/article/list")
  public String showList(Model model) {
    List<Article> articles = articleRepository.getArticles();
    model.addAttribute("articles", articles);
    return "article/list"; // → /WEB-INF/jsp/article/list.jsp
  }
}

6. JSP (리스트 페이지)

  • 경로: src/main/webapp/WEB-INF/jsp/article/list.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<!DOCTYPE html>
<html>
<head>
  <title>Article List</title>
</head>
<body>
<h1>Article List</h1>

<table border="1" cellpadding="6">
  <tr>
    <th>ID</th>
    <th>Registration Date</th>
    <th>Title</th>
    <th>Member ID</th>
  </tr>
  <c:forEach var="article" items="${articles}">
    <tr>
      <td>${article.id}</td>
      <td>${article.regDate}</td>
      <td>${article.title}</td>
      <td>${article.memberId}</td>
    </tr>
  </c:forEach>
</table>

</body>
</html>

실행할건데 그 전에 Spring_boot 재 연결을 해준다.


저 녹색화살표 위쪽에 꺼진건 다른 프로젝트에 연결했었던거라 끄고 새로운 프로젝트에 연결 한 것.


7. 실행


8. 자주 나는 오류 체크

  • 404: 컨트롤러 패키지 com.example.demo.controller 확인.

  • 뷰 404: return "article/list" ↔ JSP 경로 /WEB-INF/jsp/article/list.jsp 일치?

  • MyBatis Mapper 못 찾음:

    • mapper-locations: classpath:mappers/*/.xml 경로 철자 확인.

    • namespace ↔ 인터페이스 FQCN 일치?

  • 드라이버 오류: driver-class-name/url/username/password 확인.

  • JSTL 태그 URI: jakarta.tags.core 사용(스프링 부트 3.x, Jakarta).


다음 (4편)

  • 글 작성(Create) 폼 + 저장(POST).

  • 저장 후 리스트로 리다이렉트.

  • 유효성 체크(간단).

0개의 댓글