본문으로 바로가기

마이바티스 CRUD(삽입)

category 데이터베이스/마이바티스 2019. 1. 4. 21:21

마이바티스 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