1. 상황
MyBatis와 SQL을 활용해 게시판 코드를 짜던 중, selectOne 메서드를 실행하는 도중에 발생한 예외이다.
2. 에러 및 원인
1) 에러 메시지
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.ssafy.board.test.Test.main(Test.java:12)
Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### The error may exist in mapper/boardMapper.xml
### The error occurred while processing mapper_resultMap[boardMap]
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mapper/boardMapper.xml'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'boardMap'. Cause: java.lang.ClassNotFoundException: Cannot find class: boardMap
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:52)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:36)
at com.ssafy.board.config.MyAppSqlConfig.<clinit>(MyAppSqlConfig.java:21)
... 1 more
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mapper/boardMapper.xml'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'boardMap'. Cause: java.lang.ClassNotFoundException: Cannot find class: boardMap
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:122)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:99)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:50)
... 3 more
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mapper/boardMapper.xml'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'boardMap'. Cause: java.lang.ClassNotFoundException: Cannot find class: boardMap
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:123)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:95)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:379)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:120)
... 5 more
Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'boardMap'. Cause: java.lang.ClassNotFoundException: Cannot find class: boardMap
at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:118)
at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:102)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:138)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:131)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:121)
... 8 more
Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'boardMap'. Cause: java.lang.ClassNotFoundException: Cannot find class: boardMap
at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120)
at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149)
at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116)
... 12 more
Caused by: java.lang.ClassNotFoundException: Cannot find class: boardMap
at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:196)
at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)
at org.apache.ibatis.io.Resources.classForName(Resources.java:261)
at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:116)
... 14 more
2) 원인
resultMap을 활용해 SQL과 Dao의 변수명이 다른 부분을 해결하고자 했는데, 이 때 resultMap을 적용하는 속성인 resultMap이 아닌 resultType으로 속성을 설정해 발생했다.
1차 시도로 resultMap을 사용하지 않은 채로 코드를 짜보고 2차로 resultMap을 사용함으로써 생긴 실수였다.
- resultMap : resultMap 선언 당시 참조로 사용한 이름 입력, 자동 매핑
- resultType : 클래스명 전체 또는 alias를 입력. 매핑하고자 하는 자바 클래스의 전체 경로 입력
오타, 속성명, id명 확인 또 확인하자.
(+이 오류를 해결하는 과정에서 한 가지 더 알게된 것은 date_format을 쓰는 경우 'as SQL 필드명'을 붙여줘야 그 필드명으로 resultMap으로 들어가게 되어 내가 원하는 dao 변수명으로 출력을 할 수 있다.)
'Learning-log > Spring Error' 카테고리의 다른 글
BindingException: Invalid bound statement (not found) (0) | 2023.04.19 |
---|