오류 분석

[오류/SQL] MyBatis 마이바티스 오류 - IllegalArgumentException 런타임 에러

somuxsomu 2024. 1. 11. 10:48

 

MyBaits 오류

 

 

 

 

개발을 하다가 서버를 실행하니,

MyBatis 부분 쿼리에서 오류가 발생하였다..!

 

해당 오류가 정확히 어떤 오류인지 이해가 안되어서 

구글링을 통하여 원인을 찾아내서 오류를 해결하였다.

그래서 해결 기록 및 정리해보려고 한다.

 

 

혹시나 MyBatis가 어떤 역할을 하는지 모르는 사람들을 위해서

간단하게 개념을 정리해보려고 한다.

 

MyBatis(마이바티스)란? 

마이바티스는 DB(데이터베이스)를 쉽게 다룰 수 있도록 도와주는 오픈 소스 프레임 워크이다.

Object-Relational Mapping : ORM

마이바티스를 사용하여 데이터베이스쿼리와 프로그래밍 언러 코드를 분리하여 

유지보수성과 생산성을 높이기 위해 사용한다.

즉, 마이바티스를 사용하면 DB연결 및 쿼리작성을 쉽게 다룰 수 있다!

그리고, 동적 쿼리 작성이 가능하기 때문에 편리하다.

 

 

아래는 내가 마주한 오류 로그 이다.


org.mybatis.spring.MyBatisSystemException:

nested exception is org.apache.ibatis.exceptions.PersistenceException:

### Error querying database. Cause: java.lang.IllegalArgumentException:

Mapped Statements collection does not contain value for fileCmt.getSeq

### Cause: java.lang.IllegalArgumentException:

Mapped Statements collection does not contain value for fileCmt.getSeq


 

 

해당 오류는 자바에서 발생하는 예외 중 하나이며,

런타임 에러이다.

 

런타임에러(Run Time Error)란?

이미 컴파일이 완료되어 프로그램이 실행중임에도 불구하고,

의도치 않는 예외 상황으로 인하여

프로그램 실행 중 발생하는 오류를 의미한다

 

 

java.lang.IllegalArgumentException

잘못된 인수 값이 메소드에 전달될 때 발생한다!

 

 

이제 어떤 오류인지 알아 냈으니,

IllegalArgumentException 에러가 발생 할 수 있는 상황에 대해서 알아보자-

총 다섯가지 상황이 있다. 

 

https://blog.naver.com/javaking75/220315971085 에서 참고했다.

 


👀 IllegalArgumentException가 발생할 수 있는 상황👀 

 

1. mapper id가 다를 경우

    Configuraion.xml의 mapper (MyBatis의 쿼리문을 등록한 XML파일)에 

<select id=''.. 에 id와 mapper파일에

직접 접근하는 java파일(DAO나 service)에 적어놓은 id값이 다른 경우 

 

 

2. Parameter와 bean의 필드명이 틀린 경우

 

 

3. mapper파일(MyBatis의 쿼리문을 등록한 XML파일)에 정의된 네임스페이스(namespace)와 

   mapper파일에 직접 접근하는 java파일(DAO나 service)에서 호출하는 네임스페이스(namespace)가 다를 경우

 

 

4. MyBatis config파일에 mapper가 정의가 되어 있지 않거나 스펠링이 틀린 경우

 

 

5. mapper에 정의된 namespace 명칭이 같은 Application 내에 중복 될 경우


 

 

 

1번부터 차례대로 읽어보고 확인해보면서

어느 부분이 잘못 되었는지 확인을 해보았다.

우선, 오타는 없는거 같은데..

어디가 틀린건가 했는데..

 

 

알고보니 . . . 

 

Configuration.xml의 mapper namespace 오타가 있었다.

 

 

<mapper namespace="fileCmt"/> 인데

<mapper namespace="flieCmt"/> 로

오타를 냈다.....

영문 오타는 참 찾기 힘들어..

눈에 잘 안들어와..

 

 

오타가 없다고 생각했는데

범인은 오타였다.... ㅎ

눈을 크게 뜨고 잘 확인해보자 

 

숨은그림 찾기 인줄

오타를 내지 말자!!!!!

😅