[0609] 자바 웹 개발 과정🌞

Let's TECH🧐·2021년 6월 9일
0

자바 웹 개발 과정

목록 보기
26/31
post-thumbnail

resultMap

DB의 데이터를 가져올 때 DB Table의 컬럼명과 자바 클래스의 변수명이 다를 경우, 이를 맞춰주기 위한 도구

  • 왼쪽 자바 코드의 변수명 regDate과 오른쪽 DB Table의 컬럼명 reg_date가 다르다. 이를 맞춰주기 위해 resultMap을 사용하자.
  • resultMap에 resultType 기능이 포함된다.

NoticeDaoMapper.xml

<resultMap type="com.newlecture.web.entity.Notice" id="noticeMap"> <!-- resultMap 사용 -->
	<result column="writer_id" property="writerId" /> 
	<result column="reg_date" property="regDate" />
</resultMap>

<select id="get" resultMap="noticeMap"> 
	select * from Notice where id = #{id}
</select>

<select id="getList" resultMap="noticeMap"> 
	select * from Notice where ${field} like '%${query}%'
	order by reg_date desc
</select>

동적 쿼리

동적쿼리란 실행 시에 쿼리문장이 만들어져 실행되는 쿼리문을 말한다. 쿼리문이 변하냐 변하지 않느냐에 따라 변한다면 동적쿼리, 변하지 않으면 정적쿼리 로 생각하면 된다.

if

NoticeServiceImp

@Override
public List<Notice> getList() {
	List<Notice> list = getList(1, null, null);
	return list;
}

NoticeDaoMapper.xml

<select id="getList" resultType="com.newlecture.web.entity.Notice"> 
    	select * from Notice 
    	<if test="field != null">
    	where ${field} like '%${query}%'    	
    	</if>
	order by regdate desc
	limit #{size} offset #{offset}; 
</select>

where

NoticeDaoMapper.xml

<select id="getList" resultType="com.newlecture.web.entity.Notice"> <!-- 반환할 때 사용되는 그릇의 형식 적기 -->
    	select * from Notice 
    	<where> 
    	<if test="field != null"> <!--if절이 실행되지 않을 때도 -->
    	${field} like '%${query}%'  	
    	</if>
    	and hit=0 <!--and을 삭제시킨 후에 `hit=0'만 실행되어 오류가 발생하지 않음 -->
    	</where>
	order by regdate desc
	limit #{size} offset #{offset}; 
</select>

결과 화면

Update

MyBatis의 동적 SQL 'set' 구문을 사용하면 update를 더욱 쉽게 구현할 수 있다.

NoticeController

// edit(post)로 전달되는 것은 총 3개, notice가 가지는 속성 중 3개만 담기니까 나머지에는 null이 담기게 됨	
@PostMapping("edit")
public String edit(Notice notice) {
	dao.update(notice);
	return "redirect:detail?id="+notice.getId();
}

NoticeDaoMapper.xml

<update id="update" parameterType="com.newlecture.web.entity.Notice">
    update Notice
    	<set>
    	<if test="title != null">title = #{title},</if>
    	<if test="writerId != null">writerId = #{writerId},</if>
    	<if test="content != null">content = #{content},</if>
    	<if test="hit != null">hit = #{hit},</if>
    	<if test="files != null">files = #{files}</if>	 
    	<if test="pub != null">pub = #{pub}</if>	 
    	</set>
	where id = #{id}    	
    </update>

log 확인

application.properties

# 확인하고 싶은 로그가 있는 곳 적어주기
logging.level.com.newlecture.web.dao=trace

NoticeController

List<Notice> list = service.getList(1, null, null);

결과 화면

참고 사이트

[Oracle] 오라클 동적 쿼리 사용법 & 예제 (PL/SQL)

profile
Minju's Tech Blog

0개의 댓글