Mybatis는 동적쿼리를 작성할 수 있는 기능을 제공한다.
어떠한 원리로 동적쿼리인지 아닌지 판단하는건지 궁금해서 Mybatis 소스를 분석해보았다.
Mapper 등록과정은 아래에서 보실 수 있습니다.
지금부터는 작성한 쿼리가 동적쿼리인지 아닌지 어떻게 판단하는지 알아보겠습니다.
1.XMLConfigBuilder.mapperElement
등록할 때 XMLMapperBuilder 의 parse 메소드를 호출합니다.
2. XMLMapperBuilder.builder
이 메소드는 configurationElement 메소드를 호출합니다.
3. XMLMapperBuilder.configurationElement
이 메소드는 buildStatementFromContext 메소드를 호출합니다.
4. XMLMapperBuilder.buildStatementFromContext
이 메소드는 XMLStatementBuilder의 parseStatementNode 메소드를 호출합니다.
5. XMLStatementBuilder.parseStatementNode
이 메소드에서 드디어 동적쿼리인지 아닌지 판단하는 SqlSource를 생성합니다.
7. XMLLanguageDriver.createSqlSource
XMLScriptBuilder의 parseScriptNode 메소드를 통하여 SqlSource를 생성 후 반환합니다.
8. XMLScriptBuilder.parseScriptNode
parseDynamicTags를 통해 Dynamic 인지 아닌지 판단하고 아래 if문을 이용하여 동적쿼리라면 DynamicSqlSource를 아니라면 RawSqlSource를 생성하여 반환합니다.
XMLScriptBuilder.parseDynamicTags를 보면 NodeType이 1이거나 TestSqlNode가 동적쿼리일 때 동적쿼리라고 판단하고 있습니다.
TestSqlNode가 동적쿼리일 때는 파싱하면서 판단합니다. (참고 : GenericTokenParser.parse)
'개발 > JAVA' 카테고리의 다른 글
[JAVA] Parameter name arg0이 나올 때 (0) | 2021.01.10 |
---|---|
[Mybatis] 동적쿼리를 어떻게 만들까? (0) | 2020.12.31 |
[Mybatis] StatementType (0) | 2020.12.28 |
[Mybatis] 쿼리를 어떻게 실행하는 것일까? (0) | 2020.12.28 |
[Mybatis] Parameter not found. Available parameters are [arg0, param1] (0) | 2020.12.27 |
댓글