본문 바로가기
개발/JAVA

[Mybatis] Mapper는 어떻게 등록되는 것일까 ?

by 상용최 2020. 12. 27.
반응형

Mybatis를 처음 접하게되면 xml 또는 JAVA로 설정만 해주면 어디서든 가져다쓸 수 있다는것이 마법같이 느껴질 수 있다.

어떠한 원리로 그렇게 사용할 수 있는지 알아보도록 하겠다.

 

MybatisConfiguration.xml 파일

<configuration>
	....
    <mappers>
        <mapper resource="config/sql.xml"/>
        <mapper class="test.mapper.TestMapper" />
    </mappers>
</configuration>

SqlMapClient.java

public class SqlMapClient {
    private static SqlSessionFactory sqlMapper;

    static {
        try {
            String resource = "config/myBatisConfig.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            sqlMapper = new SqlSessionFactoryBuilder().build(reader);

        } catch(IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession() {
        return sqlMapper.openSession();
    }
}

순서

 

1. SqlSessionFactoryBuilder.build
2. XMLConfigBuilder.parse
3. XMLConfigBuilder.parseConfiguration
4. XMLConfigBuilder.mapperElement
5. Configuration.addMappes
 
 
 

1. SqlSessionFactoryBuilder.build

SqlSessionFactoryBuilder의 build method를 보면 아래와같이 build할때 xml의 정보를 파싱하는 메소드를 호출한 후 파싱된 결과를 Configuration으로 등록하는 method를 호출한다.

 

2. XMLConfigBuilder.parse

parse method를 살펴보면 configuration 하위에있는 설정들을 읽어 Configuration 으로 등록하는 메소드를 호출한다.

3. XMLConfigBuilder.parseConfiguration

parseConfiguration method를 살펴보면 mapperElement라는 method가 존재한다.

해당 메소드는 mapper설정을 읽어서 등록하는 method이다.

4. XMLConfigBuilder.mapperElement

<mappers> 하위에있는 설정을 읽어와 Configuration.MapperRegistry 를이용하여 mapper를 추가한다.

5. Configuration.addMappers

Configuration은 MapperRegistry를 필드로 들고있으며 addMappers 메소드는 MapperRegistry에 Mapper를 추가하는 역할을 한다.

 

반응형

댓글