마이바티스 CRUD(삽입)
이번은 CRUD중 데이터 삽입에 대한 마이바티스를 배워보도록 하겠습니다.
우선 기존 데이터를 삽입하는 JDBC코드를 살펴봅시다.
public Integer insertComment(Comment comment) {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = this.getConnection();
StringBuilder sql = new StringBuilder("");
sql.append("INSERT INTO COMMENT(comment_no, user_id, comment_content, reg_date) ");
sql.append("VALUES (?, ?, ?, ?) ");
stmt = conn.prepareStatement(sql.toString());
stmt.setLong(1, comment.getCommentNo());
stmt.setString(2, comment.getUserId());
stmt.setString(3, comment.getCommentContent());
stmt.setDate(4, new java.sql.Date(comment.getRegDate().getTime()));
return stmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
stmt.close();
} catch (SQLException e) {
}
try {
conn.close();
} catch (SQLException e) {
}
}
return null;
}
빨간색 코드 부분은 데이터베이스 연결 생성 부분입니다.
앞서 살펴본 조회 부분과 동일합니다.
즉, getConnection() 메소드를 통해 데이터베이스 연결을 생성합니다.
이 코드 부분은 마이바티스로 코드 변환을 할 때 마이바티스 객체 SqlSession 객체를 생성하는 것으로 대체됩니다.
초록색 코드 부분은 SQL 준비하고 PreparedStatement 객체를 생성하는 부분입니다.
이 코드 부분은 마이바티스로 코드 변환을 할 때 마이바티스 매핑 구문을 정의하는 것으로 대체됩니다.
파란색 코드 부분은 파라미터 설정 후 실행 부분입니다.
executeUpdate 후 데이터가 성공적으로 들어가면 들어간 데이터 개수를 반환합니다.
이 코드 부분은 마이바티스로 코드 변환을 할 때 마이바티스 insert 메소드 호출하는 것으로 대체 됩니다.
마지막으로 남은 코드는 자원을 해제하는 것 으로
마이바티스로 코드 변환 시 sqlSession 객체 close호출과 동일합니다.
우선 첫 번째 작업으로 매핑 구믄으로 분리 하는 작업입니다.
앞서 봤던 것처럼 CommentMapper.xml에 작성합니다.
<mapper namespace="ldg.mybatis.repository.mapper.CommentMapper">
<insert id="insertComment" parameterType="ldg.mybatis.model.Comment">
INSERT INTO COMMENT(comment_no, user_id, comment_content, reg_date)
VALUES (#{commentNo}, #{userId}, #{commentContent}, #{regDate})
</insert>
여기서는 데이터 조회와 달리 resultType 속성이 없는데
이유는 PreparedStatement 객체의 executeUpdate 메소드 반환 값이 레코드 수이기 때문입니다.
즉 실행 결과가 int형이므로 알아서 마이바티스가 처리하게 됩니다.
굳이 한다면 resultType="int"로 하시면 됩니다.
매퍼 구문을 설정 했다면
이 구문을 사용하는 마이바티스 코드를 생성해야겠죠.
즉 실행 하고 해제하는 것을 이 코드가 역할을 합니다.
SqlSession의 insert 메소드와 Sqlsesson의 close를 호출합니다
public Integer insertComment(Comment comment) {
SqlSession sqlSession = getSqlSessionFactory().openSession();
try {
//매퍼 구문 불러오기
String statement = "ldg.mybatis.repository.mapper.CommentMapper.inserComment";
int result = sqlSession.insert(statement, comment);
if (result > 0) {
sqlSession.commit();
} else {
sqlSession.rollback();
}
return result;
} finally {
sqlSession.close();
}
}
앞서 본거와 같이 SqlSession 객체 생성 후 이 객체의 insert 메서드를 호출합니다. insert 호출 시 설정했떤 매핑 구문을 불
러와서 실행 합니다. 그리고 SqlSession 객체를 해체해줍니다.
조회에서와 유일한 다른 점 하나는 트랜젝션 커밋입니다. sqlSession.commit()을 호출 하는 것을 볼수있죠.
이제 마지막으로 데이터를 입력해야합니다. 즉 위 코드를 호출하는 거겠죠.(inserComment)
우선 매퍼 구문에서 파라미터 표기를 이용한 값에 넣어야하므로 이 마이바티스 코드에서 setter로 comment에 설정 하고 insertComment를 호출 해야합니다.
public class CommentSessionRepositoryTest{
public static void main(String[] args){
public void testInsertComment() {
Long commentNo = 1L;
String userId = "fromm0";
Date regDate = Calendar.getInstance().getTime();
String commentContent = "test";
CommentSessionRepository commentSessionRepository = new CommentSessionRepository();
//매퍼 구문에 파라미터에 넣을 것들..
Comment comment = new Comment();
comment.setCommentNo(commentNo);
comment.setUserId(userId);
comment.setCommentContent(commentContent);
comment.setRegDate(regDate);
// 지우고
// commentSessionRepository.deleteComment(commentNo);
// 입력한다.
Integer result = commentSessionRepository.insertComment(comment);
System.out.println(result);
}
}
}
즉 역순으로 올라가면 이해가 될겁니다. 즉 데이터 입력 코드에서 마이바티스 코드 메소드를 호출 하고 호출된 메소드가 있는
마이바티스 코드에서 매퍼 구문을 불러 들이고 매퍼구문에서 INSERT를 실행한다고 보면 편할것같습니다.
'데이터베이스 > 마이바티스' 카테고리의 다른 글
마이바티스 CRUD(삭제) (0) | 2019.01.09 |
---|---|
마이바티스 CRUD(수정) (0) | 2019.01.07 |
마이바티스 CRUD(조회) (0) | 2019.01.03 |
마이바티스 CRUD(자바모델클래스) (0) | 2019.01.02 |
마이바티스 시작 (0) | 2018.12.30 |