폴더/계층 구조는 이렇다

많은 블로그, 정보들을 확인 봤지만 쉽지 않다. MyBatis 설정을 간단하게 해 보자

 


 

https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure

  • build.gradle
    1. org.springframework.boot version 확인
    2. java - sourceCompatibility 확인
    3. dependencies [ https://mvnrepository.com ]
      1. mysql-connector-java
      2. mybatis-spring-boot-starter
plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.15'
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

java {
	sourceCompatibility = '8'
}

dependencies {
	implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.28'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.0'
}

MyBatis 설정이 쉽지 않았는데, 아마 버전 충돌을 의심해 볼 수 있었다

springboot 프로젝트 생성 시, 기본적으로 Springboot 버전은 3.1이었고, java 버전은 17로 선언되어 있었다

MyBatis 공식 사이트 Requirements 버전 호환성에 맞게 설정해 주었다

 

dependencies 수정 후, Gradle Refresh !! 부트 버전 변경 같은 경우에는 Spring 항목 이용함

  • application.yml
server:
  port: 8000
  
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot?serverTimezone=Asia/Seoul
    username: MySQLId
    password: MySQLPassword

mybatis:
  type-aliases-package: com.example.demo
  mapper-locations: mybatis/mapper/**/*.xml

type-aliases-package을 통해 별칭을 설정할 수 있다

com.example.demo 까지 선언하였지만 아래 경로까지 다 인식해 주는 걸로 확인했다

<!-- before -->
<select id="getAllUsers" resultType="com.example.demo.user.model.User">
<!-- after -->
<select id="getAllUsers" resultType="User">

중요한 것은 class 이름만 선언해야 한다 (user.model.User ❌ model.User ❌   User ⭕️ )

 

mapper-locations 설정은 mapper.xml 위치를 알려준다.

mybatis/mapper/*.xml 일 경우는 mapper 폴더 내의 xml 파일을 인식하지만

**/*.xml 로 선언할 경우, mapper/ ... folder1 / ... folder2 / *.xml  하위 경로에 있는 모든 xml 파일들을 인식한다

 

 

  • 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.demo.mapper.UserMapper">
    <select id="getAllUsers" resultType="User">
        SELECT * FROM User
    </select>
</mapper>
  • UserMapper.java
package com.example.demo.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import com.example.demo.user.model.User;

@Mapper
public interface UserMapper {
	
	List<User> getAllUsers() throws Exception;
	
	@Select("SELECT * FROM User")
	List<User> selectAnnotation() throws Exception;
	
}
  1. Java(Interface) , XML 파일의 이름이 동일할 필요는 없다. 하지만 XML namespace 경로를 잘 지정해주어야 한다
  2. Java(Interface)에 선언한 함수 이름과 XML에 선언한 id는 동일해야 한다
  3. XML 파일을 활용하지 않는다면, @Select, @Insert, @Update, @Delete, @Results 어노테이션을 활용할 수 있다

 

  • UserServiceImpl.java
package com.example.demo.user.service.impl;

import java.util.List;

import org.springframework.stereotype.Service;

import com.example.demo.mapper.UserMapper;
import com.example.demo.user.model.User;
import com.example.demo.user.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	private UserMapper userMapper;

	public UserServiceImpl(UserMapper userMapper) {
		this.userMapper = userMapper;
	}

	@Override
	public List<User> getAllUser() throws Exception {
		List<User> list = userMapper.getAllUsers();
		return list;
	}

}

설정을 완료하였고, 이제 Mybatis를 사용할 수 있다

 

데이터베이스 연결 부분에서 문제가 생길 수도 있다. 계정과 권한을 확인해야 한다. (아래 참고링크 확인)

계정을 새로 만들었다면, 데이터베이스에 대한 권한을 부여해야 한다

 

그리고 DateTime 타입의 컬럼을 조회했을 때,  (실제 DB 값에는 T 문자가 없음에도 불구하고) "2023-09-10T 02:00:13"이라고 나올 수 있다

package com.example.demo.user.model;

import java.time.LocalDateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

@Data
public class User {
	String id;
	String password;
	String name;
	int age;

	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	LocalDateTime createDt;
	
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	LocalDateTime updateDt;
	
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	LocalDateTime deleteDt;
}

@JsonFormat을 사용하면 API 결과 값에서 T가 제거된 것을 확인할 수 있다


참고 링크

 

mybatis-spring-boot-autoconfigure – Introduction

Introduction Translations Users can read about MyBatis-Spring-Boot-Starter in the following translations: What is MyBatis-Spring-Boot-Starter? The MyBatis-Spring-Boot-Starter help you build quickly MyBatis applications on top of the Spring Boot. By using t

mybatis.org

 

mysql 사용자추가/DB생성/권한부여

서버 관리를 하다보면 mysql 사용자 계정을 추가해 줄때가 있다. MySQL 접속 및 데이터 베이스 추가# mysql -u root -p 사용자 계정을 추가하기 전에 먼저 현재 생성된 사용자 계정을 확인한다. mysql > use

nickjoit.tistory.com

'JAVA > Spring' 카테고리의 다른 글

[Springboot] MVC 패턴과 폴더 구조  (0) 2023.09.04
[Springboot] Lombok  (0) 2023.09.04
[Springboot] 스프링부트 시작하기  (0) 2023.09.03

+ Recent posts