Java/Spring

provider : searchType DB 보낼때 처리하는 방법

amungstudy 2023. 8. 18. 14:09

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();
}