DB의 데이터를 가져올 때 DB Table의 컬럼명과 자바 클래스의 변수명이 다를 경우, 이를 맞춰주기 위한 도구
<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>
동적쿼리란 실행 시에 쿼리문장이 만들어져 실행되는 쿼리문을 말한다. 쿼리문이 변하냐 변하지 않느냐에 따라 변한다면 동적쿼리, 변하지 않으면 정적쿼리 로 생각하면 된다.
@Override
public List<Notice> getList() {
List<Notice> list = getList(1, null, null);
return list;
}
<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>
<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>
MyBatis의 동적 SQL 'set' 구문을 사용하면 update를 더욱 쉽게 구현할 수 있다.
// edit(post)로 전달되는 것은 총 3개, notice가 가지는 속성 중 3개만 담기니까 나머지에는 null이 담기게 됨
@PostMapping("edit")
public String edit(Notice notice) {
dao.update(notice);
return "redirect:detail?id="+notice.getId();
}
<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>
# 확인하고 싶은 로그가 있는 곳 적어주기
logging.level.com.newlecture.web.dao=trace
List<Notice> list = service.getList(1, null, null);