[SPRING] Mybatis 프레임워크 시작하기 5 [ 검색하기 / Dynamic SQL ]

🐷Jinie (juniorDeveloper)·2020년 12월 9일
2

JSP/MVC/SPRING

목록 보기
76/81

1. 검색하기 Dynamic SQL 적용전

  • board-mapping에 조건별로 SQL구문을 만들어준다.
  • DAO에서 return에 조건을 걸어서 조건에 맞는 SQL구문의 결과를 return한다.

1-1. list.jsp

  • JSP 파일에 검색창을 추가해준다.
<form action="list.do">
	<select name="ch1">
		<option value="idx">회원번호 </option>
		<option value="name"> 이름 </option>
	</select>
	<input type="text" name="ch2">
	<input type="submit" value="검색하기">
</form>

1-2. VO 설정하기

  • 검색창에 설정한 ch1, ch2 VO를 설정해준다.
private String ch1;
	private String ch2;
	
public String getCh1() {
		return ch1;
	}
	public void setCh1(String ch1) {
		this.ch1 = ch1;
	}
	public String getCh2() {
		return ch2;
	}
	public void setCh2(String ch2) {
		this.ch2 = ch2;
	}

1-3. board-mapping SQL구문 넣기

  • like문을 이용해서 검색조건을 불러오는 쿼리를 넣어준다.
	<select id="selectAll" resultMap="PsdResult">
		SELECT * 
		FROM TABLE_PSD 
		ORDER BY IDX DESC
	</select>
	<select id="selectAll_idx" resultMap="PsdResult">
		SELECT * 
		FROM TABLE_PSD 
		WHERE IDX LIKE '%' || #{ch2} || '%' 
		ORDER BY IDX DESC
	</select>
	<select id="selectAll_name" resultMap="PsdResult">
		SELECT * 
		FROM TABLE_PSD 
		WHERE NAME LIKE '%' || #{ch2} || '%' 
		ORDER BY IDX DESC
	</select>

1-4. DAO

@Override
	public List<PsdVo> list(PsdVo vo) {
		if(vo.getCh1() == null){
			return mybatis.selectList("psdDAO.selectAll",vo);			
		}else {
			if(vo.getCh1().equals("idx")) {
				return mybatis.selectList("psdDAO.selectAll_idx",vo);			
			}else if(vo.getCh1().equals("name")) {
				return mybatis.selectList("psdDAO.selectAll_name",vo);			
			}			
		}
		return null;
	}

1-5. 결과보기

  1. 회원번호 1001을 검색한다.
  2. 회원번호 1001을 검색한 결과가 확인된다.

2. Dynamic SQL 적용 후

  • Dynamic SQL은 동적쿼리
    Mybatis의 속성 where 태그
    : 추가 쿼리 문의 내용을 where 태그문 안에 작성하면 첫 조건이 AND로 시작할지라도 WHERE로 치환해준다.
<select id="id">
SELECT * FROM table
  <where>
  	추가 SQL
  </where>
</select>

2-1. board-mapping

  • Dynamic SQL을 사용하면 where조건에 if문에 맞는 조건문을 가져와준다.
<select id="selectBoard"   resultMap="PsdResult"  >
 
	      SELECT  *  FROM  TABLE_PSD
	      <where>
		      <if test="ch1=='idx'" >
		        AND IDX LIKE '%'||#{ch2}||'%' 
		      </if>
		      <if test="ch1=='name'" >
		        AND NAME LIKE '%'||#{ch2}||'%' 
		      </if>
	      </where>
	      ORDER  BY IDX  DESC
	</select>	

2-2. DAO

  • Dynamic SQL을 사용하면 board-mapping에서 조건처리해서
    원하는 조건의 쿼리를 가져오므로 DAO의 문장이 간결해진다.
@Override
	public List<PsdVo> list(PsdVo vo) {
		return mybatis.selectList("psdDAO.selectBoard",vo);			
	}

2-3. 결과확인

  1. '봄'으로 시작하는 회원명을 검색한다.
  2. 봄날이라는 회원명이 검색된다.
profile
ᴘᴇᴛɪᴛs ᴅᴇ́ᴠᴇʟᴏᴘᴘᴇᴜʀ. ᴘʀᴏɢʀᴀᴍᴍᴀᴛɪᴏɴ = ᴘʟᴀɪsɪʀ 💕

0개의 댓글