본문 바로가기
Programming/JAVA

[MyBatis] Spring Boot Gradle 에 MySQL 연동하기

by 8ugust 2022. 3. 3.

 개발의 끝은 블로그에 내가 겪었던 과정을 설명하는 것이라고 생각한다. 그도 그럴것이... 구글링을 통해 개발 과정을 쉽게 얻을 수 있다 하더라도, 블로그 글 마다 방법이 다르고, 내가 성공하기까지 겪은 과정 또한 그것들과 다르기 때문이다. 또한 나중에 언제 다시 반복해서 겪을지 모르는 상황에 대비해서 작성하고 넘어가는게 정신건강에 좋다. 그래서 오늘은 Spring Boot Gradle에 MyBatis를 통해 MySQL을 연동하는 과정을 기술해보겠다.

 

 

 


디렉토리 구조

경로는 원하는대로 설정한 뒤

설정만 잘 맞춰주면 된다

 

 

 


1. 의존성 추가

# build.gradle
# 아래 mybatis 의존성 추가

dependencies {
    .
    .
    .
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0'
}

만약 Spring Boot Gradle 프로젝트 생성 당시 MyBatis 의존성을 추가했다면 이미 있을것이다.

추가한 뒤엔  ./gradlew build  로 빌드를 한 번 해주도록 하자.

 

 

 

 

2. DB 및 MyBatis 설정

# src\main\resources\application.properties

# database
spring.datasource.url: jdbc:mysql://127.0.0.1:3306/dbname?characterEncoding=utf8
spring.datasource.username: dbuser
spring.datasource.password: dbpasw
spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver

# mybatis
mybatis.config=mybatis/mybatis-config.xml
mybatis.mapper-locations: mybatis/mapper/*.xml

resource 디렉토리 하위에 mybatis 디렉토리를 생성했다.

mybatis 디렉토리에선 config.xml을 관리하고, 하위 디렉토리인 mapper에서 모든 mapper.xml을 관리한다.

 

 

 

 

3. MyBatis Config 파일 생성

# src\main\resources\mybatis\mybatis-config.xml

<?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="UserMapper.xml"/>
  </mappers>
</configuration>

 

 

 

 

4. Mapper 생성

# src\main\resources\mybatis\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.run.api.global.dao.UserMapper">
  <select id="getUserList" resultType="com.run.api.global.dto.user">
    SELECT * FROM users;
  </select>
</mapper>

Mapper는 두 가지로 구성되어 있다.

첫째. 쿼리를 호출하는 객체(DAO).

둘째. Response를 담을 객체(DTO).

 

DAO는 mapper 태그의 namespace 영역에

DTO는 mapper 태그 내부의 resultType 영역에 맞춰주면 된다.

원래라면 DAO & DTO를 먼저 생성한 뒤 Mapper를 작성해주는게 옳지만

설명을 위해 Mapper를 우선적으로 작성했다. 따라서 이제 생성할 DAO & DTO에 맞게 경로를 설정해주자.

 

 

 

 

4-1. DTO 생성

// src\main\java\com\run\api\global\dto\user.java
// 자신의 DB에 존재하는 TABLE 정보와 맞춰주자.
// DTO의 파일명은 mapper.xml의 resultType과 맞춰주자.

package com.run.api.global.dto;

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

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class user {
    private String id;
    private String user_id;
    private String user_nm;
    private String password;
    private String access_token;
    private String email;
    private String phone;
    private String use_yn;
    private String created_at;
    private String updated_at;
    private String deleted_at;
}

 

 

 

4-2. DAO 생성

// src\main\java\com\run\api\global\dao\UserMapper.java
// DAO 파일명은 mybtis-config.xml의 이름과 mapper.xml의 namespace와 맞춰주자.

package com.run.api.global.dao;

import java.util.List;
import com.run.api.global.dto.user;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Mapper
@Repository
public interface UserMapper {
    List<user> getUserList();
}

 

 

 

 

5. Service 작성

// src\main\java\com\run\api\domain\users\service\UserService.java
// 인터페이스명은 mapper.xml에 선언해준 ID와 맞춰주자.

package com.run.api.domain.users.service;

import java.util.List;
import com.run.api.global.dto.user;

public interface UserService {
    public List<user> getUserList();
}

 

// src\main\java\com\run\api\domain\users\service\UserServiceImpl.java
// 위의 Service는 Interface고 이건 상속받은 Class라는 것을 명시하자.

package com.run.api.domain.users.service;

import java.util.List;
import com.run.api.global.dto.user;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.run.api.global.dao.UserMapper;

@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
    private final UserMapper userMapper;

    @Override
    public List<user> getUserList() {
        return userMapper.getUserList();
    }
    
}

 

 

 

 

6. Controller 작성

// src\main\java\com\run\api\domain\users\controller\UserController.java

package com.run.api.domain.users.controller;

import java.util.List;
import com.run.api.global.dto.user;
import com.run.api.domain.users.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
public class UserController {
    private final UserService userService;
    
    @GetMapping("/hello")
    public String hello() {
        return "Hello World";
    }

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

}

여기까지 했다면 MySQL 연동이 완료되었다.

 ./gradlew build  를 통해 빌드를 수행한 뒤,

'/user' 로 접근 시 테이블 정보를 확인할 수 있다.

 

 

 

 

댓글