티스토리 뷰

유저의 첫번째 요청이 들어오기전에 톰캣은 SqlSessionFactory를 미리 준비 시켜 놓는다. 팩토리를 짓기 위해서 팩토리의 설계도가 필요할것이다 그것이 바로 MyBatis Config File이다.


그리고 나서 유저의 요청이 들어오면 SqlSessionFactory로 부터 SqlSession을 만든다. SqlSession은 데이터베이스와의 연결 상태(세션)을 유지하는 역할을 한다. 아직은 데이터베이스와 연결만 되어 있지 실제로 어떤 sql을 디비로 날릴지는 결정 되어 있지 않기 때문에 SqlSession은 Mapper Interface의 구현 객체를 생성한다. 그리고 Application에서 그 Mapper Interface의 구현객체의 메소드를 실행하게 되면 실행중에 동적으로 매핑파일의 sql내용을 참고하여 디비에 쿼리를 날리게 되는 것이다.


SqlSession session = sqlSessionFactory.openSession();
try {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101);
} finally {
  session.close();
}

Mybatis 공홈에 가면 위와 같은 코드가 예제로 나와 있다.


사용자가 요청을 하면 팩토리로부터 sql세션을 얻는다.

그리고나서, session.getMapper(BlogMapper.class);를 호출하는데, 이 부분이 바로 매퍼 인터페이스의 구현 클래스를 얻는 과정이다.

BlogMapper는 인터페이스이다. 다형성에 의해서 인터페이스형 참조 변수로 구현 클래스를 가리 킬 수 있기 때문에

BlogMapper mapper = session.getMapper(BlogMapper.class);

와 같은 구문은 가능하다.이제, 매퍼 인터페이스의 구현 클래스 까지 가져온 상태이다.


그다음은, 이 구현 클래스의 메소드에 실제 쿼리문을 매핑시켜야 하는 일만 남았다.

Blog blog = mapper.selectBlog(101);

매퍼 인터페이스의 구현 객체의 selectBlog메소드를 호출하면 이때 매퍼xml파일을 참고하여 이 메소드와 쿼리문을 매핑 시키게 된다. 그리하여 매퍼 xml에 적혀진 sql이 데이터베이스에 실행 되는 것이다.


좀더, 간단하게 그림으로 정리하면 다음과 같다.


2번에서 sqlSession을 구했다는건 디비와 연결된 상태라는것이다. 그럼 이제 연결은 됬는데 실제로 쿼리를 날릴 메소드가 필요하다. 그렇기 때문에 sqlSession으로 부터 매퍼 인터페이스 구현 클래스를 구해야 한다. (getMapper)


그렇게 되면 어떤 데이터베이스에 쿼리를 날릴 수 있는 객체를 구한 셈이다.

public interface Dao{

void insert();

}

라는 인터페이스가 있을때 sqlSession으로 부터 getMapper를 호출하면 위의 Dao 인터페이스를 구현한 클래스를 되돌려 준다.

예를 들어,

public class DaoImpl implements Dao{

void insert(){

}

}

뭐 대충 이런 모양의 구현 클래스를 getMapper를 통해 가져 온다. 하지만 내용이 여전히 비어 있다. 이 내용을 채워야 한다.

매퍼 xml파일을 참고하여 위의 내용이 비어 있는 메소드의 내용을 디비에 쿼리하는 내용으로 채우게 되는 것이다.


매퍼? 뭐랑 뭐를 매핑하는건데? 라는 의문이 들 수 도 있다. sql문과 메소드가 매핑 된다는 의미 인것 같다. 자바의 매퍼 인터페이스를 구현한 어떤 구현 클래스의 메소드와 sql문이 매핑 되어 있다. 이때 이 구현 클래스 자체를 매퍼라고 하는것 같다.

왜냐면, 메소드와 sql문이 매핑 되어 있기 떄문에!


대충 이런 방식으로 동작하는것을 알아 두자.



'컴퓨터 공학과 졸업 > 기본 개념' 카테고리의 다른 글

ApplicationContext vs WebApplicationContext  (0) 2018.08.17
[퍼옴]도메인이란  (0) 2018.08.03
웹 프로그램의 파일 구조  (0) 2018.07.27
MIME TYPE  (0) 2018.07.26
HTTP  (0) 2018.06.28
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함