티스토리 뷰

Back-end/Spring

Mybatis 데이터 삽입하기

이안_ian 2019. 2. 2. 18:32




반응형
1
2
3
4
<body>
    <a href="${path }/mybatis.do">테스트하기</a>
</body>
 
cs


저번 시간에 셋팅 했던 mybatis를 위의 코드를 시작으로 테스트를 해보려고한다. 자 시작해보자!!


컨트롤러를 만들어주고 거기에 서블릿을 만들어주자 그리고 사용할 서비스 클래스를 만들것 인데 MyBatisService는 인터페이스로 구현하고 뒤에 객체 생성은 그것을 상속받은 클래스로 생성할 것이다. 


그냥 인터페이스로 만들고 상속 받는 클래스가 무조건 구현 해야할 메소드만 올려 둔채 상속받을 클래스를 만들러 가자


클래스 생성하기를 누르고 add로 아까 만들었던 인터페이스를 상속받게 해서 만들면 빈 로직으로 자동완성 되어 클래스가 생성된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.mybatis.model.service;
 
import static common.SqlSessionTemplate.getSession;
 
import org.apache.ibatis.session.SqlSession;
 
import com.mybatis.model.dao.MyBatisDao;
import com.mybatis.model.dao.MyBatisDaoImpl;
 
public class MyBatisServiceImpl implements MyBatisService {
 
    private MyBatisDao dao = new MyBatisDaoImpl();
    
    @Override
    public int insertStudent() {
        SqlSession session = getSession();
        int result = dao.insertStudent(session);

//commit과 rollback을 따로 구현하지 않아도 사용 가능!
        if(result>0) session.commit();
        else session.rollback();
        session.close();
        return result;
    }
}
cs

그럼 위와 같이 코드를 작성하면 되는데 우리가 원래 하던 서비스 역할을 생각해보면 커넥션 정보를 생성해서 dao로 보낼때 같이 보내줬었다. 여기서도 마찬가지 이므로 먼저 서블릿에서 JDBCTemplate에 해당하는 SqlSessionTemplate을 만들고 가겠다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package common;
 
import java.io.InputStream;
 
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 
public class SqlSessionTemplate {
    public static SqlSession getSession() {
        //디비의 정보를 담아놨던 xml파일
        String resource = "/mybatis-config.xml";
        SqlSession session = null;
        try {
            //inputStream으로 해당 경로의 파일을 가져온다.
            InputStream is = Resources.getResourceAsStream(resource);
            //빌더를 생성한다.
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            //빌더로 가져온 xml를 형식대로 가져와 factory에 넣고
            SqlSessionFactory factory = builder.build(is);
            //open으로 열어서 session에 넣는다. false는 오토 커밋 막은것.
            session = factory.openSession(false);
        }catch (Exception e) {
            e.printStackTrace();
        }
        //디비 연결정보를 담은 session을 넘김
        return session;
    }
}
cs

주의 할점은 JDBCTemplate처럼 static으로 설정해주면 편하게 사용 가능하다. 그럼 이제 이전 코드에서 12번째 줄 보면 Dao도 있는데 service 만든것 처럼 똑같이 인터페이스구현 해주고 상속받으면 된다.


1
2
3
4
5
6
7
package com.mybatis.model.dao;
import org.apache.ibatis.session.SqlSession;
 
public interface MyBatisDao {
    int insertStudent(SqlSession session);
}
 
cs

아까와는 달리 매개변수가 필요해서 추가해줬다.


1
2
3
4
5
6
7
8
9
10
11
package com.mybatis.model.dao;
import org.apache.ibatis.session.SqlSession;
 
public class MyBatisDaoImpl implements MyBatisDao {
    @Override
    public int insertStudent(SqlSession session) {
        int result = session.insert("mybatis.insertStudent");
        return result;
    }
}
 
cs

이렇게 해주면 session에 이전에 등록한 mybatis-config에서의 mappers를 참조하는데 등록된 mappers의 xml파일로 들어가 session.insert("mapper namespace.insert id"); 값을 찾아간다. 아래 사진 참고해 위 코드를 보면 쉽게 매핑될 것이다.

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 
<mapper namespace="mybatis">
    <insert id="insertStudent">
        insert into student values(seq_student.nextval,'고소영','01034332123','Prince@naver.com','서울시 ㅏ',default)
    </insert>
</mapper>
 
cs

이렇게 매핑된 sql문이 실행된다. 지금은 동작 테스트중이라 정적인 데이터만 넣었다.



짠! 성공했다~

초기 셋팅이 좀 어마어마하지만 확실히 전에 쓰던 코드양이 엄청 줄었다. 앞으로 이런 세팅만 해주면 dao쪽 코드를 많이 줄이고 가독성이 높아질것으로 예상된다. 아주 좋군!!



반응형

'Back-end > Spring' 카테고리의 다른 글

Spring STS 설치하기!!  (0) 2019.02.14
MyBatis List와 Map으로 데이터 불러오기  (4) 2019.02.11
Spring JSTL Formatting Tags  (0) 2019.02.01
Spring EL & JSTL  (0) 2019.01.30
Spring Action Tag  (0) 2019.01.29
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31