오늘은 DB 테이블에 등록되어있는 데이터를 검색하고 이를 위해 쿼리문에 동적 SQL 사용하는 법을 배웠다.
1) 먼저 회원 검색과 조회를 할 수 있는 페이지를 만들고 아이디, 닉네임으로 검색할 수 있게 select option으로 드롭앤다운을 만들어준다.
2) 그리고 mapper.xml에 검색과 조회를 위한 SELECT문을 추가해준다. 조건에 맞는 SELECT문 작성을 위해 전달되는 parameterType에 SearchVo 객체를 넣어주고 SELECT의 result set을 받아올 resultType엔 MemberVo 객체를 설정한다. 초기 검색 화면에서 전체 데이터 조회 결과 출력을 위해 동적 SQL인 if를 써주고 조건 속성 test에 searchType과 searchValue가 null이 아닐 때만 WHERE절이 실행하도록 한다. 그리고 searchValue는 null이 아니라 빈문자열 처리한 이유는 초기 화면뿐 아니라 입력값 없이 검색을 눌렀을시에도 전체 회원이 나오도록 한 것이다. input text에 입력 없이 제출시 빈 문자열이 온다. 그리고 bind는 변수 설정을 해줄 수 있는 동적 SQL이다. like 연산자에 %를 사용하기 위해 bind value 속성에 searchValue에 %를 붙여주고 name 속성에 변수 이름을 설정해준다.
3) 이제 컨트롤러에 SELECT 한 결과 list를 화면으로 보내주고 결과를 확인해본다.
4) choose when의 경우 Java에서 if ~ else if ~ else 정도로 생각하면 된다. searchType이 id일 때(아이디 카테고리로 검색했을때) when 안의 쿼리를 실행 시켜주고 searchType이 nick일 때(별명 카테고리로 검색했을때), 그리고 다른 조건일 때를 설정하는 otherwise가 있다.
5) 그리고 동적 SQL은 아니지만, 오늘 마지막에 배워서 추가로 간단히 올린다. 이전 수업에서 DB 테이블 컬럼의 이름과 자바 객체의 변수 이름이 달라 쿼리문에 별칭을 주거나, 자바 객체의 이름을 바꾸거나, 마이바티스 config.xml에서 Camel Case 설정을 해줬었는데 아래 이미지처럼 resultMap을 사용하는 방법도 있다. column 속성에 DB 컬럼 이름을 작성하고 property에 연결해줄 자바 객체 변수를 작성해주면 된다. 어떻게 생각하면 이 방법이 제일 좋을 듯 싶다..?