똑같은 삽질은 2번 하지 말자

SqlSession 객체 본문

Spring/Mybatis

SqlSession 객체

곽빵 2019. 6. 15. 18:04

JDBC 프로그래밍에서

Connection con= DriverManager.getConnection(url, id, pw);

 

Conntection이란 단순히 물리적(네트워크) 연결을 말하는 

SqlSession이란 RDB에 인증을 거친 논리적인 연결 상태를 말하는 것이다.

 

Mybatis를 이용하여 DAO를 구현하려면 SqlSession 객체가 필요하다.

(MyBatis 와 JDBC의 관계 또는 정의에 대해서는 https://heewon26.tistory.com/83 참고)

(but 실제로 구현할 필요는 없다. Spring 컨테이너에서 생성하도록 설정하면 자동구현이 되기때문

이번엔 이해를 위해 한번 쳐보도록 하자.)

 

java 코드로 실제 구현

import java.io.Reader;
import org.apache.ibatis.io.Resources; // ibatis 는 pom.xml에 주입해줘야한다.
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlSessionFactoyBean {
    private static SqlSessionFactory sessionFactory = null;
    static {
        try {
            if(sessionFactory == null) {
                Reader reader = Resources.getResourceAsReader("MyBatis 환경설정 파일");
                sessionFactory = new SqlSessionFactoryBuilder().build(reader); // 설정 정보 읽고 객체 생성
            }
        }catch(Exception e) {
            System.out.println("오류 내용: " + e);
        }
    }
    public static SqlSession getSqlSessionInstance() {
        return sessionFactory.openSession(); // SessionFactory에서 SqlSession 얻어오기
    }
}

 

이렇게 구현해서

 

public DAO() {
    mybatis = SqlSessionFactoryBean.getSqlSessionInstance
}
public void insert(VO vo) {
    mybatis.insert("DAO.insert", vo); // 실행될 SQL Mapper에 선언된 네임스페이스.아이디(BoardDAO.insertBoard)
}

 

이렇게 사용해주면 된다.

 

Spring에서 Mybatis 연동할 시(자동구현)

<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:sql-map-config.xml" />
</bean>
<bean class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg ref="sessionFactory"></constructor-arg>
</bean>

 

위와 같이 Spring 설정 파일에 주입한 뒤

 

@Repository("productDAO")
public class ProductDAO {
	@Autowired
	private SqlSessionTemplate mybatis;
	
	public void insertProduct(ProductVO vo) {
		mybatis.insert("ProductDAO.insertProduct",vo);
	}
}

 

 

이미 빈으로 등록되어있기 때문에 어디서든 사용 가능하다.

 

 

'Spring > Mybatis' 카테고리의 다른 글

Mybatis 동적쿼리, <include> 문법 사용법  (0) 2020.08.11
Comments