MyBatis :: selectList와 selectOne
간단한 게시판 프로젝트를 만들던 와중, 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로 반환하지는 않는다)
자바 메소드로 매개변수 받는 법을 더 연습해야겠다.