Framework/Spring

MyBatis :: selectList와 selectOne

초록 (green) 2016. 2. 15. 17:41

간단한 게시판 프로젝트를 만들던 와중, contents.jsp에서 오류가 나서 그 오류를 살펴보았다.

 

 

24번째 라인에서 오류가 났다는 건 personVO = personDao.selectById("id", "DESC"); 부분에서 오류가 났다는 것이었다.

 

 

오류 내용 : Type mismatch : cannot conver from List<PersonVO> to PersonVO

List<PersonVO> 형을 PersonVO로 변환할 수 없다는 내용의 오류였다.

 

 

PersonDao.java 파일을 살펴봤다.

HashMap을 사용하여 List<PersonVO>에 넣었는데, 오류가 형 변환이라길래 단순히 List<PersonVO>를 PersonVO로 변환하면 오류가 해결되지 않을까 해서

 

personVO = (PersonVO)personDao.selectById("name", "DESC");

 

로 바꿔봤다.

 

 

 

코드상으로는 오류가 나지 않으나 컴파일을 시키니 또 형 변환 오류가 났다. 이게 아닌 것 같다..

 

오류를 해결할 수 있는 키워드가 '형 변환'인 것만은 확실하다.

 

PersonDao.java 파일을 유심히 보다가, 내가 출력하려는 contents.jsp 페이지의 목적이 list.jsp에서 클릭하는 사람의 정보 하나만 가져오는 것이기 때문에 personDao.selectById 메소드는 selectOne 메소드를 사용하여 List<PersonVO>가 아닌 단일 정보인 PersonVO를 출력하는 것으로 고쳐야 한다.

 

 

contents.jsp 의 수정된 부분 코드.

 

 

내가 오류의 문제를 잘 못 이해하고 있었던 것.

list.jsp에서 클릭하는 한 명의 정보만 선택되어야 하기 때문에 selectOne 메소드를 사용해야 한다.

 

오류 해결.

그러나 오류는 또 다른 오류를 생성하고.. 이름이 왜 null로 표기되는지 또 다른 오류 해결을 위하여.

 

 

* selectOne vs selectList 비교

1. selectOne : 쿼리 결과가 없으면 null을 반환

   쿼리 결과로 레코드가 하나만 나와야 한다

   DB에 레코드가 하나만 있는 경우에 사용 => 다수의 레코드가 있을 시 TooManyResultsException 에러 발생

 

2. selectList : 쿼리 결과를 List<E>로 반환

  결과가 없을 시에는 빈 List를 반환한다(null로 반환하지는 않는다)

 

 

자바 메소드로 매개변수 받는 법을 더 연습해야겠다.