▷ Criteria 클래스는 type과 keyword라는 변수를 추가 ▷getter, setter는 Lombok을 통해 생성하고, getTypeArr는 검색 조건이 각 글자(T, W, C)로 구성 됨 ▷검색 조건을 배열로 만들어 한 번에 처리하기 위함 ▷getTypeArr() 이용해 MyBatis의 동적 태그 활용 가능
(1) BoardMapper.xml에서 Criteria 처리
▷ BoardMapper.xml은 기존의 getListWithPaging()을 수정해 동적 SQL 처리
▷ 검색 조건이 3가지이므로 총 6가지 조합이 가능하지만, 각 문자열을 이용해 검색 조건을 결합하는 형태로 하면 3개의 동적 SQL 구문만으로도 처리를 할 수 있음
▷ <foreach>를 이용해 검색 조건들을 처리하는데 typeArr라는 속성을 이용 ▷ MyBatis는 원하는 속성을 찾을 때 getTypeArr()와 같이 이름에 기반을 두어 검색하기 때문에 Criteria에서 만들어둔 getTypeArr() 결과인 문자열의 배열이 <foreach>의 대상이 됨 ▶ MyBatis는 엄격하게 Java Beans의 규칙을 따르지 않고 get/set 메소드만을 활용하는 방식
▷<choose> 안쪽의 동적 SQL은 'OR title ... OR content ... OR write ...' 와 같은 구문을 만들어 냄 ▷바깥쪽에서는 <trim>을 이용해서 맨 앞에 생성되는 'OR'를 없애줌
◎ BoardMapperTests.java 클래스 수정
▷ 동적 SQL은 경우에 따라 여러 종류의 SQL이 생성될 수 있으므로 제대로 동작하는지 여러 번의 확인을 거쳐야 함
...(생략)...@TestpublicvoidtestSearch(){Criteriacri=newCriteria();cri.setKeyword("새로");cri.setType("TC");List<BoardVO> list = mapper.getListWithPaging(cri);list.forEach(board -> log.info(board));}...(생략)...
▷ testSearch()는 Criteria 객체의 type과 keyword를 넣어 원하는 SQL이 생성되는지 확인하기 위함
◎ 조건에 따른 출력 결과 확인
◎ sql, include와 검색 데이터의 개수 처리
▷ 동적 SQL을 이용해 검색 조건을 처리하는 부분은 해당 데이터 개수를 처리하는 부분에서도 동일하게 적용
▷ 동적 SQL을 수정하는 경우 매번 목록을 가져오는 SQL과 데이터 개수를 처리하는 SQL 쪽을 같이 수정해야 함
◎ BoardMapper.xml 내용 추가
▷ MyBatis는 <sql>이라는 태그를 이용해 SQL의 일부를 별도로 보관하고, 필요한 경우 include