2020/09/27 - [사이드 프로젝트] - 2. Spring boot + MSSQL
프로젝트를 할 때 자바 퍼시스턴스 프레임워크로 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' 인 파일들을 의미한다.
그리고 '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 |