MyBatis로 동적 쿼리를 추가했는데
Error로 Tomcat이 작동을 안 하는 사태가 발생했다 ㅡ.ㅡ
오류 로그
Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\IntelliJ\hi\target\hi-1.0.0-BUILD-SNAPSHOT\WEB-INF\classes\mapper\BoardMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [C:\IntelliJ\hi\target\hi-1.0.0-BUILD-SNAPSHOT\WEB-INF\classes\mapper\BoardMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'SearchBoard'. Cause: java.lang.ClassNotFoundException: Cannot find class: SearchBoard
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:523)
at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:380)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1767)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1704)
... 55 more
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [C:\IntelliJ\hi\target\hi-1.0.0-BUILD-SNAPSHOT\WEB-INF\classes\mapper\BoardMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'SearchBoard'. Cause: java.lang.ClassNotFoundException: Cannot find class: SearchBoard
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:123)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:95)
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:521)
... 58 more
Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'SearchBoard'. Cause: java.lang.ClassNotFoundException: Cannot find class: SearchBoard
at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:118)
at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:76)
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)
... 60 more
Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'SearchBoard'. Cause: java.lang.ClassNotFoundException: Cannot find class: SearchBoard
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)
... 64 more
Caused by: java.lang.ClassNotFoundException: Cannot find class: SearchBoard
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)
... 66 more
MyBatis에서 나는 오류 같았다
+ 동적 쿼리를 추가한 Mapper
<sql id = "selectQuery">
SELECT no, title, content, id, view_cnt, comment_cnt, reg_date
FROM board
</sql>
<sql id = "selectKindBoard">
<choose>
<when test=' option == "A" '>
AND (title LIKE concat('%',#{keyword},'%')
OR content LIKE concat('%',#{keyword},'%'))
</when>
<when test=' option == "T" '>
AND title LIKE concat('%',#{keyword},'%')
</when>
<otherwise>
AND id LIKE concat('%',#{keyword},'%')
</otherwise>
</choose>
</sql>
<!-- 아래 두개가 문제가 있음 -->
<select id="searchSelectPage" parameterType="SearchBoard" resultType="BoardDto">
<include refid="selectQuery"/>
WHERE true
<include refid="selectKindBoard"/>
ORDER BY reg_date DESC, no DESC
LIMIT #{offset}, #{pageSize}
</select>
<select id="searchResultCnt" parameterType="SearchBoard" resultType="Integer">
SELECT count(*)
FROM board
WHERE true
<include refid="selectKindBoard"/>
</select>
주석을 활용한 결과
1) sql 쿼리들 자체는 문제가 없음
2) <include> 대신 쿼리문을 직접 넣어줘도 오류 발생
.
.
.
결론은
parameterType="SearchBoard" 의 경로 설정을 안 해줘서 나는 오류였다 ㅡ.ㅡ
mybatis-config.xml 에 SearchBoard의 typeAlias를 추가해주니 잘 돌아간다 :)
mybatis-config.xml
<typeAliases>
<typeAlias alias="MemberDto" type="com.holiday.hi.domain.MemberDto"/>
<typeAlias alias="BoardDto" type="com.holiday.hi.domain.BoardDto"/>
<typeAlias alias="CommentDto" type="com.holiday.hi.domain.CommentDto"/>
<typeAlias alias="SearchBoard" type="com.holiday.hi.domain.SearchBoard"/>
</typeAliases>
<!-- Mapper에 새로운 쿼리를 추가할 땐, parameter OR result의 Type이 경로 설정 되어있는지 확인하자 -->
728x90
'오류를 개발새발' 카테고리의 다른 글
JPA) Spring boot랑 JPA 연동할 때 확인하기 (0) | 2022.12.21 |
---|---|
JPA) Table 'DB이름.hibernate_sequence' doesn't exist (0) | 2022.12.21 |
MyBatis) DeleteAll을 테스트할 때 주의하기(반환값은 0) (0) | 2022.11.18 |
Spring) ajax에서 JSON으로 값이 전달되지 않았던 이유 (0) | 2022.11.15 |
Spring) @Autowired 한 객체가 왜 null값이 뜰까?(sqlsession null) (0) | 2022.11.14 |