방향
- 큰틀인 CRUD를 [mapper], [xml], [repository] 로 나누어서 정리해놓은 블로그가 있다. 보면서 직접 써보고 쪼개서 공부해보자
1. INSERT
- mapper
void save(Post post);
- XML
<insert id="save" useGeneratedKeys="true" keyProperty="id">
INSERT INTO post( writer_id, title, content, create_date, modified_date, views)
values (#{writerId}, #{title}, #{content}, #{createDate}, #{modifiedDate}, #{views})
</insert>
- repository
@Override
public Post save(Post post) {
post.setCreateDate(LocalDateTime.now());
post.setModifiedDate(LocalDateTime.now());
postMapper.save(post);
return post;
}
- insert 태그 내의 id에는 mapper 인터페이스에서 정의한 메소드 이름과 일치시켜 연결한다.
- #{}를 사용하여 PreparedStatement의 파라미터를 바인딩한다.
- useGeneratedKeys : DB에서 키를 자동 증가시킬 때 사용한다.
- keyProperty : 생성되는 키의 attribute 이름을 지정한다.
2. SELECT
- mapper
Optional<Post> findById(Long id);
- XML
<select id="findById" resultType="Post">
SELECT id, writer_id, title, content, create_date, modified_date, views
FROM post
where id = #{id}
</select>
- repository
@Override
public Optional<Post> findById(Long id) {
return postMapper.findById(id);
}
3. UPDATE
- mapper
void updatePost(@Param("id") Long id, @Param("updateParam") Post updateParam);
- XML
<update id="updatePost">
UPDATE post
SET title=#{updateParam.title},
content=#{updateParam.content},
modified_date=#{updateParam.modifiedDate}
WHERE id=#{id}
</update>
- repository
@Override
public Post updatePost(Long id, Post updateParam) {
updateParam.setModifiedDate(LocalDateTime.now());
postMapper.updatePost(id,updateParam);
return findById(id).get();
}
4. DELETE
- mapper
void deletePost(Long postId);
- XML
<delete id="deletePost">
DELETE FROM post
WHERE id=#{postId}
</delete>
- repository
@Override
public void deletePost(Long postId) {
postMapper.deletePost(postId);
}
5. 공부 내용
- 기본 사용법은 구도락 프로젝트에서 했던 문법들이기에 가볍게 봐도 충분할 것 같다. 가장 중요한 동적 쿼리를 공부하자
6. 출처