2017 - 10 - 25 (수)
코드로 배우는 스프링 웹프로젝트[구멍가게 코딩단 지음] 참조
UriComponents
URI를 작성할 때 도음을 주는 클래스이다. 이와함꼐 UriComponentsBuilder를 같이 사용한다.
사용법을 보면 다음과 같다.
public String makeQuery(int page){
UriComponents uriComponents =
UriComponentsBuilder.newInstance()
.queryParam("page", page)
.queryParam("perPageNum", cri.getPerPageNum())
.build();
return uriComponents.toUriString();
}
makeQuery를 활용하여 페이지에 따른 게시글을 표시해준다.
<c:forEach items="${list}" var="boardVO">
<tr>
<td>${boardVO.bno}</td>
<td><a
href='/board/readPage${pageMaker.makeQuery(pageMaker.cri.page) }&bno=${boardVO.bno}'>
${boardVO.title}</a></td>
<td>${boardVO.writer}</td>
<td><fmt:formatDate pattern="yyyy-MM-dd HH:mm"
value="${boardVO.regdate}" /></td>
<td><span class="badge bg-red">${boardVO.viewcnt }</span></td>
</tr>
</c:forEach>
동적 SQL
MyBatis는 Mapper를 활용하여 DB에 특정 쿼리문을 날린다.
MyBatis는 내부적으로 몇개의 표현식을 가지고 있어서 상황에 따른 SQL 생성을 할 수 있다.
이것을 동적 SQL 이라 한다.
IF , CHOOSE , TRIM , FOREACH 를 활용한다.
아래는 if를 사용한 예이다.
<sql id="search">
<if test="searchType != null" >
<if test="searchType == 't'.toString()">
and title like CONCAT('%', #{keyword}, '%')
</if>
<if test="searchType == 'c'.toString()">
and content like CONCAT('%', #{keyword}, '%')
</if>
<if test="searchType == 'w'.toString()">
and writer like CONCAT('%', #{keyword}, '%')
</if>
<if test="searchType == 'tc'.toString()">
and ( title like CONCAT('%', #{keyword}, '%') OR content like CONCAT('%', #{keyword}, '%'))
</if>
<if test="searchType == 'cw'.toString()">
and ( content like CONCAT('%', #{keyword}, '%') OR writer like CONCAT('%', #{keyword}, '%'))
</if>
<if test="searchType == 'tcw'.toString()">
and ( title like CONCAT('%', #{keyword}, '%')
OR
content like CONCAT('%', #{keyword}, '%')
OR
writer like CONCAT('%', #{keyword}, '%'))
</if>
</if>
</sql>