본문 바로가기
Spring Boot

[Spring Boot] Sprig Boot와 MySQL + MyBatis 연동하기

by ZIAHO 2024. 7. 2.

안녕하세요.

 

Spring Boot로 토이프로젝트를 진행하게 되어 세팅부터 차근차근 정리하면서 진행을 해보려고 합니다.

 

이번시간에는 Spring Boot에 MySQL 과 MyBatis를 연동하는 시간을 가져보겠습니다.


1. MySQL 설치

https://dev.mysql.com/downloads/windows/installer/

위 주소에서 MySQL Community 8.0을 다운받아 설치합니다.

자세한 설치 과정은 저도 보고 따라 해서 출처에 남기도록 하겠습니다.


※ 추가로 설치 이후 저는 User 라는 테이블을 만들어 두었습니다.

email을 id 값으로하고 password를 저장하는 테이블입니다.

현재 데이터는 없으나, 추후 회원가입 기능을 추가하면서 데이터를 추가 할 예정입니다.


2. 의존성 추가

제 프로젝트는 Gradle을 사용하고 있어 Gradle을 기준으로 작성하도록 하겠습니다.

build.gradle에 아래 dependencies를 추가합니다.

// MYSQL
implementation 'mysql:mysql-connector-java:8.0.26'

// MyBatis
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
runtimeOnly 'mysql:mysql-connector-java:8.0.26'

 

1) mybatis-spring-boot-starter

  • MyBatis를 Spring Boot 애플리케이션에 쉽게 통합할 수 있도록 도와주는 도구
  • MyBatis 설정 자동화
  • Spring Boot 애플리케이션의 구성 및 일관성 유지

2) mysql-connector-java

  • MySQL DB를 Java Application과 연결하는데 사용되는 JDBC 드라이버
  • MySQL과의 통신을 위한 표준 API 제공
  • DB 연결, 쿼리 실행, 결과 처리 등의 작업 수행

3. 설정 정보 추가

application.properties

# MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/sys
spring.datasource.username=root
spring.datasource.password=0000
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# MyBatis
mybatis.config-location= classpath:mybatis-config.xml
mybatis.mapper-locations= classpath:mapper/*.xml
mybatis.type-aliases-package= wt.worktiger.user

 

4. 세팅

1) mybatis-config.xml

사용할 mapper 파일을 매핑해줍니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <mappers>
    <mapper resource="mapper/UserMapper.xml"/>
  </mappers>
</configuration>

 

2) MybatisConfig.java

SqlSessionFactory와 SqlSessionTemplate를 Bean으로 등록하기 위한 설정을 해줍니다.

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import javax.sql.DataSource;

@Configuration
public class MyBatisConfig {

  /**
   * SqlSessionFactory 빈 생성
   *
   *
   * @param dataSource 데이터베이스 연결을 위한 DataSource 객체
   * @return SqlSessionFactoryBean 객체
   * @throws Exception 예외 처리
   */
  @Bean
  public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
    sqlSessionFactoryBean.setDataSource(dataSource); // 데이터 소스 설정
    // MyBatis 설정 파일 위치 지정
    sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
    return sqlSessionFactoryBean.getObject(); // SqlSessionFactory 반환
  }

  /**
   * SqlSessionTemplate 빈 생성
   *
   *
   * @param sqlSessionFactory SqlSessionFactory 객체
   * @return SqlSessionTemplate 인스턴스
   */
  @Bean
  public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
    return new SqlSessionTemplate(sqlSessionFactory); // SqlSessionTemplate 반환
  }
}
  • SqlSessionFactory
    • MyBatis와 데이터베이스 사이의 세션을 관리
    • SQL 실행이나 트랜잭션 관리에 필요한 SqlSession 인스턴스를 생성하는 데 사용
  • SqlSessionTemplate
    • MyBatis의 SqlSession 구현 및 스프링 트랜잭션 설정과의 통합을 용이하게 함
    • SqlSession의 스레드 안전한 공유 인스턴스를 제공하여, SQL 작업 실행 및 트랜잭션 관리를 단순화

5. 사용

세팅을 완료 후, 처음에 만들어 두었던 user 테이블에서 회원 정보를 조회하는 예제를 통해서

MyBatis와 MySQL을 사용해 데이터를 처리하는 과정을 살펴보겠습니다.

 

/* 

 * 실제 서비스라면 사용자의 개인정보(패스워드) 등을 아무 조건없이 조회할 수 있어서는 안되겠지만,

 * 해당 예제는 초기 목적인 Spring Boot와 MySQL, MyBatis의 연동을 확인하기 위함이니 추후 제거할 예정입니다.

 */

 

1) User Entity

사용자의 정보를 담는 데이터 전송 객체를 작성합니다.

 

User.java

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {

  private String email;
  private String password;

}

* 해당 어노테이션들은 lombok을 통해서 추가하는 어노테이션들인데 추후에 따로 정리해보도록 하겠습니다.

 

2) Mapper

user 테이블의 데이터에 접근하기 위한 mapper 인터페이스와

Mapper 파일에 실제 사용할 SQL 쿼리를 작성합니다.

 

UserMapper.java

import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import *****.user.entity.User;

@Mapper
public interface UserMapper {

  List<User> selectAllUser();

}

 

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="******.user.mapper.UserMapper">

  <select id="selectAllUser" resultType="wt.worktiger.user.entity.User">
    SELECT * FROM USER;
  </select>

</mapper>

 

3) Service & Controller

사용자의 요청을 처리하고 비즈니스 로직을 실행하는 Controller와 Service를 구현합니다.

 

UserService.java

UserMapper를 주입받아, 세팅해둔 DB로부터 사용자 정보를 조회해오는 로직을 처리합니다.

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import *****.user.entity.User;
import *****.user.mapper.UserMapper;

@Service
public class UserService {

  private final UserMapper userMapper;

  @Autowired
  public UserService(UserMapper userMapper) {
    this.userMapper = userMapper;
  }

  public List<User> selectAllUser() {
    return userMapper.selectAllUser();
  };

}

 

UserController.java

사용자의 요청을 받아 사용자 정보를 조회하고 이를 반환합니다.

@RestController 어노테이션을 사용하였기 때문에 JSON의 형태로 데이터를 전송합니다.

import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import *****.user.entity.User;
import *****.user.service.UserService;

@RestController
public class UserController {

  private final UserService userService;

  public UserController(UserService userService) {
    this.userService = userService;
  }

  @GetMapping("/selectAllUser")
  public List<User> selectAllUser() {
    return userService.selectAllUser();
  }

}

 

4) 결과

정상적으로 데이터를 가져오는 것을 확인 할 수 있습니다.

지금은 테이블에 데이터가 존재하지 않기때문에 빈값으로 나옵니다.


출처

1) MySQL 설치

https://hongong.hanbit.co.kr/mysql-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%8F-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0mysql-community-8-0/

 

MySQL 다운로드 및 설치하기(MySQL Community 8.0)

SQL을 본격적으로 사용하려면 DBMS를 설치해야 합니다. 여러 가지 DBMS 중에서 MySQL 설치 하는 방법을 알아보고, 정상적으로 설치가 되었는지 확인하는 방법을 알아보겠습니다. 2021년 10월 기준 MySQL

hongong.hanbit.co.kr

 

2) 세팅 및 사용

https://velog.io/@yu-jin-song/Spring-Boot-MyBatis-MySQL-%EC%97%B0%EB%8F%99

 

[Spring Boot] MyBatis, MySQL 연동

❗ 들어가기 전에 > 이 글에서는 Spring Boot 초기 설정 및 MySQL 설정 관련 내용은 다루지 않습니다. 🔎 관련 글 보러가기 Spring Boot 초기 설정 MySQL 설정 ⚙️ 프로젝트 환경 🛠️ 개발 도구 |항목|버

velog.io