Ajax에서 controller에게 form데이터를 전송하고, 해당 map 타입을 받았다.
$.ajax({
url: "/comment/addComment",
type: "POST",
contentType: "application/json",
data: JSON.stringify({
commentContent: $('textarea[name="commentContent"]').val(),
password: $('input[name="password"]').val(),
prodNo: ${product.prodNo},
postNo: $('input[name="postNo"]').val()
}),
success: function (comments) {
console.log(comments);
},
});
컨트롤러에서 @RequestBody(Map<String,Object> requestMap)으로 JSON을 받아서
Mybatis에 map을 파라미터로, 댓글을 삽입하고, 시퀀스로 저장한 해당 댓글의 넘버를 리턴받으려고 했다.
<insert id="addComment" parameterType="map">
INSERT INTO COMMENTS (COMMENT_NO, USER_ID, COMMENT_CONTENT, PASSWORD, PROD_NO, REG_DATE)
VALUES (SEQ_COMMENT_NO.nextval, #{userId}, #{commentContent}, #{password}, #{prodNo}, CURRENT_TIMESTAMP)
<selectKey keyProperty="commentNo" resultType="Integer" order="AFTER">
SELECT SEQ_COMMENT_NO.currval AS commentNo FROM dual
</selectKey>
</insert>
그러나 쿼리 실행후, comment.commentNo을 디버깅한 결과, 0으로 고정되어 나오는 것이다.
Mybatis docs에서 인용하였다.
<insert id="insertUser" parameterType="User">
insert into users (id, username, password)
values (#{id}, #{username}, #{password})
</insert>
User타입의 파라미터 객체가 구문으로 전달되면 User 객체의 id, username, password 필드를 구문의 #{} 플레이스홀더에 대응하여 데이터베이스에 삽입한다. 그후 리턴값은 parameterType에 넘겨준 객체에 넘어간다. 결국 <insert> 구문이 실행된 뒤 User 객체에는 데이터베이스에 삽입한 데이터와 동일한 값들이 세팅된다.
이전에 나는 map타입으로 파라미터를 줬기때문에 근본적으로 Comment객체에 리턴값을 넘길수 없었던것이다.
도메인 네임과 같게 parameterType= comment로 문제를 해결했다.
참고자료_ Property 파트
https://mybatis.org/mybatis-3/ko/sqlmap-xml.html
'Mybatis' 카테고리의 다른 글
[Mybatis] insert 쿼리 실행 결과를 리턴받아 원하는 값 얻기 <selectKey> (0) | 2023.08.24 |
---|