전자정부 프레임워크 공부

Spring Framework 프로젝트 예제 - Spring MVC + MyBatis + MySQL

그랜파 개발자 2025. 5. 22. 16:14

Spring과 MyBatis를 연동하는 방법은 다음과 같은 주요 단계로 구성됩니다.

아래 예제는 Spring MVC + MyBatis + MySQL을 기준으로 작성되었습니다.

MySQL 8용 테이블 생성 SQL

use springdb;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO users (username, email) VALUES 
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com'),
('David', 'david@example.com'),
('Eva', 'eva@example.com'),
('Frank', 'frank@example.com'),
('Grace', 'grace@example.com'),
('Hannah', 'hannah@example.com'),
('Ian', 'ian@example.com'),
('Jane', 'jane@example.com');

✅ 1. Maven 의존성 추가

pom.xml

<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <version>8.3.0</version> <!-- 또는 사용 가능한 최신 안정 버전 -->
</dependency>

<!-- Spring JDBC 추가 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>5.3.30</version>
</dependency>

<!-- MyBatis-Spring -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>2.0.7</version>
</dependency>

<!-- MyBatis -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.15</version>
</dependency>

✅ 2. dispatcher-servlet.xml 설정 (Spring 설정 파일)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context 
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/mvc 
           http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- Controller 검색 -->
    <context:component-scan base-package="com.example.controller,com.example.service" />

    <!-- 기본 MVC 설정 (ViewResolver 등) -->
    <mvc:annotation-driven />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <context:property-placeholder location="classpath:jdbc.properties" />

    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
      <property name="driverClassName" value="${jdbc.driverClassName}" />
      <property name="url" value="${jdbc.url}" />
      <property name="username" value="${jdbc.username}" />
      <property name="password" value="${jdbc.password}" />
    </bean>

    <!-- JdbcTemplate 등록 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- SqlSessionFactory 설정 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:mapper/*.xml" />
    </bean>

    <!-- Mapper 인터페이스 스캔 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.example.mapper" />
    </bean>

</beans>

✅ 3. Mapper 인터페이스 생성

package com.example.mapper;

import java.util.List;

import com.example.vo.UserVO;

public interface UserMapper {
    List<UserVO> getAllUsers();
}

✅ 4. Mapper XML 파일 생성 (src/main/resources/mapper/UserMapper.xml)

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

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

    <select id="getAllUsers" resultType="com.example.vo.UserVO">
        SELECT id, username, email
        FROM users
    </select>

</mapper>

✅ 5. VO 클래스 생성

package com.example.vo;

public class UserVO {
    private int id;
    private String username;
    private String email;

    // Getter/Setter for id
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    // Getter/Setter for username
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    // Getter/Setter for email
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

✅ 6. Service/Controller 구성

UserService.java

package com.example.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.mapper.UserMapper;
import com.example.vo.UserVO;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public List<UserVO> getUsers() {
        return userMapper.getAllUsers();
    }
}

UserController.java

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public String users(Model model) {
        model.addAttribute("users", userService.getUsers());
        return "users"; // JSP 뷰 이름
    }
}

✅ 7. web.xml 또는 Java 기반 설정을 통해 Spring 설정 등록

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

✅ 8. JSP 뷰 (users.jsp)

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<h2>User List</h2>
<ul>
    <c:forEach var="user" items="${users}">
        <li>${user.username} (${user.email})</li>
    </c:forEach>
</ul>

✅ 요약

구성 요소 역할
mybatis-spring, mybatis MyBatis와 Spring 연동
SqlSessionFactoryBean, MapperScannerConfigurer MyBatis 매퍼와 Spring 연결
UserMapper, UserMapper.xml SQL과 Java 연결
Service, Controller, VO 일반적인 MVC 패턴 구성

http://localhost:8080/spring-web-demo/users