Spring MVC + MyBatis로 데이터 화면에 출력! Entity, Controller, Service, Mapper, JSP
📌 Entity, Controller, Service, Mapper, JSP를 사용하여 데이터를 화면에 보여주는 과정 🎯
✅ 백엔드에서 데이터를 가져오고, JSP에서 데이터를 출력하는 전체 과정!
🔥 1️⃣ 전체 흐름 (Spring MVC + MyBatis 구조)
[1] 사용자가 브라우저에서 웹사이트를 방문함 (JSP)
↓
[2] 사용자가 특정 데이터를 요청함 (Controller)
↓
[3] Controller가 Service에 데이터 요청
↓
[4] Service가 Mapper(DAO)에게 데이터 요청
↓
[5] Mapper(DAO)가 데이터베이스(MySQL)에서 데이터 조회
↓
[6] 조회된 데이터를 Service → Controller → JSP로 전달
↓
[7] JSP에서 데이터를 화면에 출력
✅ 즉, Controller → Service → Mapper → DB → JSP 흐름으로 데이터가 오고 감!
🔥 2️⃣ 프로젝트 구조
/src/main/java/com/example/controller/UserController.java (Controller)
/src/main/java/com/example/service/UserService.java (Service)
/src/main/java/com/example/mapper/UserMapper.java (Mapper/DAO)
/src/main/java/com/example/entity/User.java (Entity)
/src/main/resources/mapper/UserMapper.xml (SQL 쿼리)
/src/main/webapp/WEB-INF/views/userList.jsp (JSP 화면)
/src/main/resources/application.properties (DB 설정)
✅ 각 파일이 어떤 역할을 하는지 하나씩 설명할게!
🔥 3️⃣ 데이터베이스 테이블 생성 (MySQL)
💡 MySQL에서 users 테이블을 만들어서 데이터를 저장해보자!
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL
);
✅ 기본적인 users 테이블을 생성 (id, name, email 포함)
🔥 4️⃣ Entity (데이터를 저장하는 객체)
💡 Entity는 DB의 테이블과 1:1로 매칭되는 객체!
package com.example.entity;
public class User {
private int id;
private String name;
private String email;
public User() {}
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } ✅ 이 객체를 통해 DB에서 가져온 데이터를 저장할 수 있음!
🔥 5️⃣ Mapper (데이터베이스와 연결, DAO 역할)
💡 MyBatis를 사용해서 DB와 연결하는 인터페이스!
package com.example.mapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserMapper {
@Select("SELECT * FROM users")
List<User> getAllUsers();
}
✅ @Select("SQL문")을 사용해서 DB에서 데이터를 가져옴!
🔥 6️⃣ Mapper XML 파일 (UserMapper.xml)
💡 SQL 쿼리를 XML 파일로 관리할 수도 있음!
<mapper namespace="com.example.mapper.UserMapper">
<select id="getAllUsers" resultType="com.example.entity.User">
SELECT * FROM users;
</select>
</mapper>
✅ SQL을 XML 파일에서 관리하면 코드가 더 깔끔해짐!
🔥 7️⃣ Service (비즈니스 로직을 처리)
💡 Service는 Mapper를 호출해서 데이터를 가져오는 역할!
package com.example.service;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<User> getUsers() {
return userMapper.getAllUsers();
}
}
✅ Service는 데이터를 가공하거나 추가 로직을 수행할 수 있음!
🔥 8️⃣ Controller (클라이언트 요청을 받는 역할)
💡 Controller는 사용자의 요청을 받아서 Service를 호출하고 JSP로 데이터를 넘김!
package com.example.controller;
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public String getUsers(Model model) {
List<User> users = userService.getUsers();
model.addAttribute("users", users);
return "userList"; // userList.jsp로 이동
}
}
✅ 사용자가 /users를 요청하면 Service에서 데이터를 가져와서 JSP로 넘김!
🔥 9️⃣ JSP (데이터를 화면에 출력)
💡 JSP에서 Controller에서 받은 데이터를 출력할 수 있음!
📌 파일 경로: /src/main/webapp/WEB-INF/views/userList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<title>사용자 목록</title>
</head>
<body>
<h1>사용자 목록</h1>
<table border="1">
<tr>
<th>ID</th>
<th>이름</th>
<th>이메일</th>
</tr>
<c:forEach var="user" items="${users}">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.email}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
✅ Controller에서 model.addAttribute("users", users);로 넘긴 데이터를 ${users}로 출력 가능!
✅ JSTL의 <c:forEach>를 사용해서 List<User>를 반복문으로 출력!
🔥 1️⃣0️⃣ 실행 과정 정리
1️⃣ 사용자가 브라우저에서 /users 요청
2️⃣ Controller (UserController)가 요청을 받음
3️⃣ Service (UserService)가 데이터 요청
4️⃣ Mapper (UserMapper)가 DB에서 데이터 조회
5️⃣ 조회된 데이터를 Controller → JSP로 전달
6️⃣ JSP에서 데이터를 화면에 출력!
✅ 이제 MySQL에 저장된 사용자 데이터를 JSP에서 볼 수 있음!
📌 최종 정리
Entity | DB 테이블을 Java 객체로 표현 |
Mapper (DAO) | DB에서 데이터를 가져오는 역할 |
Service | 비즈니스 로직 처리 |
Controller | 사용자의 요청을 처리하고 데이터를 JSP로 전달 |
JSP (View) | 데이터를 화면에 출력 |