똑같은 삽질은 2번 하지 말자
SqlSession 객체 본문
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