ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MyBatis - 데이터 삽입하기
    MyBatis 2019. 2. 4. 17:30

    Mybatis를 이용하여 데이터베이스에 데이터를 삽입해보겠습니다.
    이 글을 보시기 전에 mybatis 설정이 안되있다면 MyBatis 시작하기 를 참고하세요

    데이터베이스에 테이블과 시퀀스 생성하기

    데이터를 삽입하기 위해 아래와 같은 테이블과 시퀀스를 생성합니다.

        create table student(
          student_no number primary key,
          student_name varchar2(30) not null,
          student_tel char(11) not null,
          student_email varchar2(50),
          student_addr varchar2(256),
          reg_date date default sysdate
       );
       create sequence seq_student;

    가상의 데이터도 하나 넣어줍니다.

        insert into student values (seq_student.nextval, '홍길동', '01012345678', 'honggd@google.com','서울시 강남구', default);

    데이터가 잘 들어가 있습니다.

    테스트 클래스 만들기

    MVC 구조를 이용하여 몇가지 클래스들을 만들겠습니다.

    컨트롤러를 담당하는 MybatisTestServlet 서블릿 입니다.

        @WebServlet("/mybatis.do")
        public class MybatisTestServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        private MyBatisService service = new MyBatisService();
    
        public MybatisTestServlet() {
            super();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            int result = service.insertStudent();
            String msg = result > 0 ? "입력 완료" : "입력 실패";
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().append(msg);
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            doGet(request, response);
        }
    }

    트랜잭션 처리를 해줄 MyBatisService 클래스입니다.

        import static common.SqlSessionTemplate.getSession;
    
        public class MyBatisService {
    
        private MyBatisDao dao = new MyBatisDao();
    
        public int insertStudent() {
            SqlSession session = getSession();
            int result = dao.insertStudent(session);
    
            if(result > 0) {
                session.commit();
            }else {
                session.rollback();
            }
    
            session.close();
            return result;
        }
    }

    예전에 만들어두었던 SqlSessionTemplate 를 이용하여 SqlSession을 받아옵니다.

    DB와 통신하는 MybatisDao 클래스입니다.

        public class MyBatisDao {
        public int insertStudent(SqlSession session) {
            int result = session.insert("mybatis.insertStudent");
            return result;
        }
    }

    JDBC를 이용하여 작성할 때보다 간편해진 것을 볼 수 있습니다.

    mapper 작성하기

    resource 폴더 밑에 mybatis\mapper 로 폴더를 생성합니다. (resource\mybatis\mapper 의 경로가 됩니다.)
    mapper 폴더에 mybatis-mapper.xml 파일을 생성합시다.

    우클릭 - New - Other를 선택합니다.

    xml로 검색하여 XML File을 선택합니다.

    파일 이름은 mybatis-mapper.xml 로 적고 Next를 누릅니다.

    DTD 파일을 선택하고 Next를 누릅니다.

    XML Catalog entry 를 선택한 후 DTD Mapper를 선택합니다.

    이미지와 같은 화면이 나오시면 됩니다. Finish를 눌러 완료합니다.

    xml 파일이 생성되었습니다. chche-ref 태그는 사용하지 않을 것이니 지워줍니다.

    mapper 태그를 아래와 같이 작성합니다.

        <mapper namespace="mybatis">
          <insert id="insertStudent">
            INSERT INTO STUDENT VALUES(SEQ_STUDENT.NEXTVAL, '둘리', '01012345678', 'ABCD@NAVER.COM', '경기도 성남시', DEFAULT)
          </insert>
        </mapper>

    insert SQL 이 작성되었습니다.
    mapper 태그의 namespace와 insert 태그의 id 값은 위에서 작성한 Dao 에서 사용하는 id 값과 동일해야 합니다.

    따라서 namespace 는 mybatis, id 값은 insertStudent를 적어주었습니다.

    index.jsp 작성하기

    테스트 서블릿으로 가는 링크를 가진 jsp 파일을 만들겠습니다.
    body 태그 안에 간단하게 a 태그만 넣어주었습니다
    <a href="<%=request.getContextPath() %>/mybatis.do">테스트 하기</a>

    잘 동작하는지 확인해보기

    student 테이블에는 아직 하나의 데이터만 들어있습니다.

    테스트 하기 링크를 눌러봅시다.


    입력 완료가 출력 되었다.
    정말 데이터가 삽입되었는지 DB에서 확인해보자.

    데이터가 잘 들어갔다.

    반응형

    댓글

Designed by Tistory.