build.gradle의 dependencies 위치에 2개의 의존성만 추가해주면 된다.
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.4'
implementation "mysql:mysql-connector-java:5.1.44"
MyBatis 같은 경우 "DB"를 활용하기 위한 기술이다 보니 일단 어떤 DB를 활용할 것인지 지정해줘야 한다.
(DB 설치 및 활용 방법 같은 경우 나중에 포스팅하도록 하겠다)
이후 application.properties에 "어디에 Mapper가 위치해있는가"에 대한 정보를 입력해 줄 필요가 존재한다.
Mapper Interface 입장에서 매칭 될 Mapper File 위치를 알아야 Query문을 연결시킬 수 있기 때문이다.
추가해야 할 application.properties 내용은 아래와 같다.
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.jdbc-url=jdbc:mysql://127.0.0.1:3306/database
spring.datasource.username=root
spring.datasource.password=root
mybatis.type-aliases-package=egovframework.com.review.mapper
mybatis.mapper-locations=mybatis/mapper/**/*.xml
내가 연결할 DB에 대한 정보를 전달하는 것이다.
jdbc:{사용할 DB 종류}://{IP 주소}:{DB Port}/{사용할 DB 이름}
mybatis.type-aliases-package
지정한 패키지의 "하위에" 존재하는 모든 Mapper Interface를 찾아주는 역할이다.
지정한 패키지 기준 하위에 존재하는 모든 파일을 찾다 보니 같은 이름의 파일이 2개 존재할 경우 에러가 발생할 수 있다.
물론 모든 클래스 이름을 다르게 하는 게 1순위지만(사실 이렇게 코드를 짜야한다. 똑같은 이름이 다른 패키지에 존재해버리면 프로그램이 너무 복잡해진다) @Alias 어노테이션을 활용해 같은 클래스 이름이라도 다르게 활용할 수 있다
mybatis.mapper-locations
"어떤 경로에 Mapper Interface와 대응되는 파일이 존재하는가"를 명시해주는 설정값이다.
Spring Web Project 기준 resources 경로를 시작으로 파일을 찾게 된다. 위 설정값을 보면 mybatis/mapper/*/.xml으로 값이 설정되어 있는데, 이 의미를 하나씩 뜯어보자.
mybatis : resource/mybatis 패키지로 가라
mapper : resources/mybaatis/mapper 패키지로 가라
** : *은 패키지 아래에 있는 모든 파일이 올 수 있음을 의미하고 **은 패키지 아래 있는 모든 파일 및 폴더를 통틀어 의미한다. 즉, **을 입력했으므로 모든 파일과 "폴더에 존재하는 모든 하위 폴더 및 파일"까지 포함한다는 의미이며, 이는 지정한 패키지에 속하는 모든 파일들을 의미한다. 즉 resouces/mybaits/mapper Depth와 관계없이 패키지에 속한 모든 파일들에 적용된다는 것이다.
*.xml : resources/mybatis/mapper 패키지와 그 하위에 존재하는 모든 파일들 중 .xml이라는 확장자를 가진 파일만 Mapping File로 인지한다는 것이다.(즉 이 XML 확장자를 가진 파일에 존재하는 Query문만 활용할 수 있음)