본문 바로가기
사이드 프로젝트/게시판

3. MyBatis 설정

by 나는 유찌 2020. 9. 27.

2020/09/27 - [사이드 프로젝트] - 2. Spring boot + MSSQL

 

2. Spring boot + MSSQL

< 이전글 > 2020/09/12 - [사이드 프로젝트/게시판] - 1. Spring boot 프로젝트 생성 1. Spring boot 프로젝트 생성 * 이클립스 마켓플레이스에서 spring을 설치 또는 아래의 주소에서 Spring Tool Suite를 먼저..

dev-yujji.tistory.com

 

 

프로젝트를 할 때 자바 퍼시스턴스 프레임워크로 MyBatis를 설정할지 JPA를 설정할지 결정할 수 있다.

 

둘의 차이점은 MyBatis는 쿼리를 XML 파일에서 직접 작성하고 JPA는 쿼리가 아닌 메소드를 이용해 데이터를 불러오게 된다는 큰 차이를 가지고 있다.

 

물론 JPA를 사용한다고 해서 쿼리를 직접 짜지 못하는 것은 아니지만! JPA는 MyBatis를 이용했을 때 로직보다도 쿼리에 더 집중된 현상을 보완했다는 것을 생각해보면 JPA를 사용해 직접 쿼리를 짠다는 건 의도에 어긋난다고 생각한다.

 

또한, JPA는 Union 같은 쿼리문을 사용할 수 없다고 한다. 따라서 복잡한 쿼리를 이용하는 경우 JPA 사용을 추천하지 않는다.

 

좌측이 MyBatis이고 우측이 JPA이다.

 

나는 게시판 만들기를 진행하며 MyBatis를 이용할 것이다.

 

 

 

설정


'pom.xml' 파일을 열고 MyBatis Dependency를 추가한다.

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.1.3</version>
</dependency>

 

그다음 'application.properties' 파일에 MyBatis와 관련된 설정 값들을 입력해준다.

mybatis.type-aliases-package=com.example.CommunityBoard
mybatis.mapper-locations=classpath:mapper/*.xml

○ type-aliases-package : 별칭 설정이다. DTO Class 파일이 들어간 상위 폴더 경로로 잡아주어도 된다. 

○ mapper-locations : 이름 그대로 매퍼 파일의 위치를 잡아준다. 'mapper/*.xml'의 뜻은 'resources' 폴더 밑의 'mapper' 폴더가 있고 그 안의 모든 이름의 파일이면서 확장자가 '.xml' 인 파일들을 의미한다.

 

Mapper 파일 위치

 

 

그리고 'application.java' 파일로 들어가 @MapperScan 어노테이션을 붙여주고 경로를 잡아준다.

해당 경로는 '@Mapper' 또는 '@Repository' 어노테이션이 붙은 파일이 있는 경로로 설정하면 된다.

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = "com.example.CommunityBoard")
public class CommunityBoardApplication {

	public static void main(String[] args) {
		SpringApplication.run(CommunityBoardApplication.class, args);
	}

}

 

 

 

DTO, Controller, Service, Mapper(Repository), XML


 

 

1. Users DTO

@Getter
@Setter
@NoArgsConstructor
public class Users {
	private String userId;
	private String password;
	private String email;
	private String name;
	private String phoneNumber;
	private String address;
	private String role;
}

'@Getter', '@Setter', '@NoArgsConstructor'는 Lombok 라이브러리에서 제공해주는 어노테이션이다. 해당 어노테이션이 있으면 getter, setter 코드들은 작성하지 않아도 된다. '@NoArgsConstructor' 어노테이션은 생성자를 만들어주는데 본인은 Null 처리를 이 어노테이션 즉, 생성자를 이용하여 하기 때문에 작성해주었다.

 

2. JoinController

@Controller
@RequestMapping("/join")
public class JoinController {

	@Autowired
	JoinService joinService;
}

 

 

회원가입 부분을 만들기 위해 'JoinController'를 생성했다. 

 

3. JoinService

@Service
public class JoinService {

	@Autowired
	JoinMapper joinMapper;
}

 

4. JoinMapper

@Mapper
public interface JoinMapper {

}

 

5. JoinMapper.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.CommunityBoard.join.mapper.JoinMapper">
	

</mapper>

 

이런 식으로 설정해주면 된다.

 

 

참고로 내가 설정한 프로젝트의 구조는 이렇다.

 

최근 회사에서 한 프로젝트 안에 JPA만을 사용하다가 복잡한 쿼리 사용으로 MyBatis를 같이 설정하는 일이 있었는데 그때 삽질 때문에 경로 잡는 문제를 생각해서 프로젝트 구조를 잘 나누어 주는 게 좋을 것 같다는 생각이다..

 

다음 포스팅은 Logback 설정에 대해서 포스팅하겠다.

'사이드 프로젝트 > 게시판' 카테고리의 다른 글

5. Controller에서 alert 띄우기, 화면 이동하기  (2) 2020.10.05
4. Logback 설정  (0) 2020.09.27
2. Spring boot + MSSQL  (0) 2020.09.27
1. Spring boot 프로젝트 생성  (0) 2020.09.12