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를 추가하는 역할을 한다.
'개발 > JAVA' 카테고리의 다른 글
[Mybatis] 쿼리를 어떻게 실행하는 것일까? (0) | 2020.12.28 |
---|---|
[Mybatis] Parameter not found. Available parameters are [arg0, param1] (0) | 2020.12.27 |
[Mybatis] Interface를 이용하여 Query 날리기 (0) | 2020.12.27 |
[Mybatis] Application Server의 Connection Pool 이용하기 (0) | 2020.12.26 |
[Mybatis] interceptor 를 등록하면 어떠한 원리로 동작하는가 ? (0) | 2020.12.25 |
댓글