mvc part11_common/board/provider 참고
org.apache.ibatis.jdbc.SQL : 메소드 이용해서 쿼리문 만드는 객체
# mapper(=dao)에 작성
type에는 provider클래스 적어준다.
@SelectProvider(type=BoardQueryProvider.class, method="searchSelectSql")
List listCriteria(SearchCriteria cri) throws Exception;
#provider 클래스에는
mapper 메소드의 argument와 같이 메소드를 작성해준다.
ex) public String searchSelectSql(SearchCriteria cri) {
}
public String searchSelectSql(SearchCriteria cri) {
SQL sql = new SQL();
sql.SELECT("*");
sql.FROM("re_tbl_board");
String titleQuery = "title LIKE CONCAT('%','"+cri.getKeyword()+"','%')";
String contentQuery = "content LIKE CONCAT('%',#{keyword},'%')";
String writerQuery = "writer LIKE CONCAT('%',#{keyword},'%')";
String type = cri.getSearchType();
if(type != null
&& !type.trim().equals("")
&& !type.trim().equals("n")) {
// searchType이 존재하는 경우
// t c w tc cw tcw
if(type.contains("t")) {
sql.OR().WHERE(titleQuery); // WHERE 없으면 OR 생략됨. WHERE 존재시 OR 해줌
}
if(type.contains("c")) {
sql.OR().WHERE(contentQuery);
}
if(type.contains("w")) {
sql.OR().WHERE(writerQuery);
}
}
sql.ORDER_BY("origin DESC, seq ASC");
sql.LIMIT(cri.getStartRow()+","+cri.getPerPageNum());
String query = sql.toString();
미리 쿼리문 작성해놓고
contains 메소드 이용해서 추가해줌.
sql.OR().WHERE(titleQuery);
WHERE 없으면 OR 생략됨. WHERE 존재시 OR 해줌
위에꺼는 기본형태임.
이렇게 쓸 수 있다.
//조회수 증가
public String updateCnt(int bno) {
//자기자신 호출하고 있음(메소드 체인)
return new SQL().UPDATE("re_tbl_board")
.SET("viewcnt = viewcnt + 1")
.WHERE("bno = #{bno}")
.toString();
}
'Java > Spring' 카테고리의 다른 글
이메일 검증하는 법 : SMTP 활용 (0) | 2023.08.24 |
---|---|
CSRF(Cross-Site Request Forgery) 공격 (0) | 2023.08.22 |
8.17 사용자 처리 및 board (0) | 2023.08.17 |
INTERCEPTOR (0) | 2023.08.14 |
트랜잭션 제어 (0) | 2023.08.11 |