/usr/article/list 페이지에서 표 출력.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편의 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

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);


기준 패키지: com.example.demo
경로:
vo/Article.java
repository/ArticleRepository.java
mappers/ArticleMapper.xml (resources)
controller/ArticleController.java
package com.example.demo.vo;
import lombok.Data;
@Data
public class Article {
private int id;
private String regDate;
private String title;
private int memberId;
}
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();
}
<?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>

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
}
}
<%@ 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 재 연결을 해준다.

저 녹색화살표 위쪽에 꺼진건 다른 프로젝트에 연결했었던거라 끄고 새로운 프로젝트에 연결 한 것.
Run As → Spring Boot App
표가 보이면 성공.

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).
글 작성(Create) 폼 + 저장(POST).
저장 후 리스트로 리다이렉트.
유효성 체크(간단).