먼저 SQL Developer 또는 CMD(sqlplus -> 환경변수 설정)로 System 계정으로 들어가 유저를 생성합니다.
모든 권한 부여도 해주고,
기본적으로 DB 포트번호가 8080으로 되어있을텐데 9090으로 변경해줍니다.
//유저 생성
create user my_book IDENTIFIED BY my_book
default tablespace users
temporary tablespace temp;
//권한 부여
grant connect, dba to my_book;
//포트 번호 확인
select dbms_xdb.gethttpport() from dual; //8080
//포트 번호 변경
exec dbms_xdb.sethttpport(9090);
커넥션 풀 설정
매번 DB Connection을 선언하는 코딩 방식은 좋지 않습니다. (반복되는 코드, 유지보수 이유 등등)
따라서 커넥션 풀을 설정하여 미리 연결을 통해 맺은 객체들을 pool(풀)에 저장해두었다가 요청이 들어오면 connection을 해주고, 처리가 다 끝나면 다시 반납해줘서 pool에 저장하는 방식을 말합니다.
설정하는 방법은 DataSource 설정하는 것인데 스프링부트를 사용하면 application.properties에서 설정이 가능합니다.
MyBatis의 가장 핵심적인 객체는 SQLSession와 SQLSessionFactory 객체입니다.
SQLSessionFactory는 내부적으로 SQLSession을 생성해내는데 이 SQLSession을 통해서 Connection을 생성하거나 원하는 SQL을 전달하고, 결과를 리턴받는 구조로 작성하게 됩니다.
스프링은 SQLSession와 SQLSessionFactory 객체를 생성하여 빈으로 등록해야 하지만 스프링부트에서는 메인 애플리케이션에 @MapperScan을 사용하면 스프링 부트가 @Mapper가 붙은 MyBatis 매퍼를 스캔하여 빈으로 등록할 수 있도록 합니다.
스프링 부트 메인 애플리케이션 클래스 @MapperScan을 붙이고 mapper 패키지 경로를 입력합니다.
2. application.properties
# MyBatis
# mapper.xml 위치 지정
mybatis.mapper-locations: mybatis-mapper/**/*.xml
# model 프로퍼티 camel case 설정
mybatis.configuration.map-underscore-to-camel-case=true
# 패키지 명을 생략할 수 있도록 alias 설정
mybatis.type-aliases-package=com.azurealstn.codespringweb.domain
# mapper 로그레벨 설정
logging.level.com.azurealstn.codespringweb.mapper=TRACE
3. Mapper(인터페이스, XML) 생성
Mapper를 작성하는 방법이 두 가지가 있습니다. 하나는 애노테이션, 다른 하나는 XML을 이용하는 방법이 있습니다. 두 방법 모두 장단점이 있으니 일단 모두 구현해보겠습니다.
애노테이션 구현 방법
먼저 mapper 디렉토리를 만들어 TimeMapper 인터페이스를 생성합니다.
여기서 중요한 점은 TimeMapper 인터페이스에 이 인터페이스가 Mapper라는 것을 인식할 수 있게 @Mapper을 꼭 붙여주어야 합니다. 그래야 @MapperScan에서 찾을 수 있습니다.
만약 스프링 부트가 아닌 스프링을 사용하신다면 root-context.xml 파일에 설정을 해주어야 합니다.
TimeMapper 인터페이스
package com.azurealstn.codespringweb.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface TimeMapper {
@Select("select sysdate from dual")
public String getTime();
}
Test 하기
test 폴더안에 TimeMapperTest 클래스를 만들고 코드를 작성합니다.
초록색 체크 표시가 뜨면 정상 동작 확인
package com.azurealstn.codespringweb.persistence;
import com.azurealstn.codespringweb.mapper.TimeMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@Slf4j
@SpringBootTest
public class TimeMapperTest {
@Autowired
private TimeMapper timeMapper;
@Test
public void testGetTime() {
log.info("timeMapper class name: " + timeMapper.getClass().getName());
log.info("timeMapper time: " + timeMapper.getTime());
}
}
XML 구현 방법
이제 XML로 구현하는 방법을 알아보겠습니다.
src/main/resources 폴더 내 mybatis-mapper 디렉토리 생성해주고 그 아래 TimeMapper.xml 파일을 생성해줍니다.
우리가 application.properties에서 설정한 경로입니다.
# mapper.xml 위치 지정
mybatis.mapper-locations: mybatis-mapper/**/*.xml
다음으로 TimeMapper 인터페이스에 한 줄 코드를 추가합니다.
package com.azurealstn.codespringweb.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface TimeMapper {
@Select("select sysdate from dual")
public String getTime();
//XML 방식
public String getTime2();
}
여기서는 SQL을 작성하지 않는데 바로 TimeMapper.xml에 작성을 해줄 것입니다.
댓글