프로그래밍/JSP

알기 쉬운 JSP MyBatis 셋팅 방법에 대해 알아보자

byungmin 2020. 8. 4. 17:20

1. 다운받은 mybatis-3.x.x.zip 압축풀기

압축풀고 나온 jar파일을 XXproject/WebContent/WEB-INF/lib/ 폴더에 넣어두자.

2. JavaResources/src에 common.config 패키지를 만들자.

1) 해당 패키지에 mybatis-config.xml 파일을 생성하자

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 데이터베이스 트랜잭션 관리자 설정=========== -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED"> <!--myBatis의 풀을 사용하겠단 의미-->
				<property name="driver"
				 value="oracle.jdbc.driver.OracleDriver" />
				<property name="url" 
				value="jdbc:oracle:thin:@localhost:1521:XE" />
				<property name="username" value="myshop" />
				<property name="password" value="tiger" />
			</dataSource>
		</environment>
	</environments>
	<!-- 매퍼 정의================================ -->
	<mappers>
		<mapper resource="common/mapper/SampleMapper.xml" />
	</mappers>
</configuration>

하나씩 살펴보자.

 

DOCTYPE을 통해 문서 타입을 configuration으로 설정해주고

태그를 사용하기 위해 DTD Config 3.0을 설정해준다.

 

<environments> 태그의 default는 개발환경을 설정할 때 쓰인다.

<environment> 태그의 id가 development로 작성되었기 때문에 같은 이름으로

default에 작성해준다.

 

<dataSource> 태그는 type="POOLED"를 통해 myBatis의 풀을 사용하겠단 의미다.

우리는 Oracle을 사용하기 때문에 url을 오라클로 지정해주고

sql name, password 를 자신의 아이디와 비밀번호를 작성해준다.

 

<mappers> 태그는 매퍼를 정의하는 태그이며

<mapper> 태그를 통해 xml파일을 생성해서 sql문을 작성한 파일과 매핑할 수 있도록 한다.

3. Mapper 파일 생성

1) 위의 <mapper> 태그에서 common/mapper/SampleMapper.xml을 지정해줬으므로 

common/mapper 패키지를 생성하고 그 안에 

SampleMapper.xml 파일을 생성하자.

 

2) 이 곳에서 쿼리문을 작성할 수 있다.

<?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="common.base.SampleMapper"> <!-- 임의로 정의 가능, 패키지 같은 의미라고 생각 -->
	<!-- myshop 계정의 테이블  수를 가져오는 쿼리문을 써보자. -->
	<select id="tableCount" resultType="int"> <!-- 쿼리에서 받은 데이터를 int로 받겠다는 의미 -->
		select count(*) from tab
	</select>
</mapper>

자신의 계정의 테이블 수를 가져오는 쿼리문을 작성해보자.

select count(*) from tab 쿼리를 <select> 태그 안에다가 작성해주자.

 

<mapper> 태그의 namespace속성은 작성할 때 중요하다. 또 쓰이니까 패키지 이름과 동일하게 지어주면 편하다.

4. xxxDAOMyBatis 클래스를 작성하자

import org.apache.ibatis.io.*;
import org.apache.ibatis.session.*;
import java.util.*;
import java.io.*;

public class SampleDAOMyBatis {
	
     	// 네임스페이스 지정. SampleMapper.xml에 지정된 namespace값과 동일해야함
	private final String NS = "common.base.SampleMapper";
	
	/**사용자 정의 메소드: SqlSessionFactory객체를 반환하는 메소드*/
	public SqlSessionFactory getSqlSessionFactory() { 
		
		// 디자인패턴, factory 패턴, 설계도 역할: mybatis-config.xml
		// 설계도와 스트림 연결
		// 
		
		// 공장을 지으려면 설계도가 필요
		String resource="common/config/mybatis-config.xml"; 
        	// 설계도 역할을 하는 파일(mybatis 환경설정 파일)
		
		// 설계도와 스트림 연결
		InputStream is = null;
		
		try {
			is = Resources.getResourceAsStream(resource);
		
			// 공장을 짓는 SqlSessionFactoryBuilder 생성
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); // 건축가
			
			// is를 넣어서 공장을 하나 지어준다.
			SqlSessionFactory factory = builder.build(is); // 공장 짓기
			return factory;
			
			
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
		
	} //-------------------------------
    
    	public int selectTableCount() {
		SqlSessionFactory factory = this.getSqlSessionFactory();
		// 공장을 통해 상품을 생산
		SqlSession session = factory.openSession();
		
		try {
		int count = session.selectOne(NS+".tableCount");
		//SampleMapper의 id의 tableCount가 들어간다.
		
		// 결과가 하나이면 One, 여러개면 selectList 이런식으로 가져온다.
		// 아이디 앞에 namespce 들어가야함
		
		System.out.println("count="+count);
		
		return count;
		
		} finally {
			if(session != null) session.close();
		}
		
	} //------------------------------
    
}

1) 네임스페이스 지정: 네임스페이스는 mapper.xml에서 만들 때 쓴 namespace와 동일하게 지정해준다.

2) SqlSession팩토리를 만들어준다. 이 때 설계도는 1번에 만들었던 mybatis-config.xml이다.

 

3) Session팩토리를 만들었다면 selectTableCount() 메소드를 만들고 팩토리에서 상품을 하나 생산한다.

SqlSession session = factory.openSession(); 

 

int count = session.selectOne(NS+".tableCount"); 를 작성해준다.

NS는 우리가 지정한 nameSpace 이고 tableCount는 SampleMapper.xml의 id와 동일하게 준다.

그리고 count 값을 리턴하자.

5. 예제 구현

셋팅이 좀 복잡하지만 그래도 셋팅해보고 잘 셋팅이 되었는지 구현해보자

myBatisTest.jsp 파일을 생성하고 common.base.SampleDAOMyBatis 를 임포트 해주자

<%@page import="common.base.SampleDAOMyBatis"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

    <%
    	SampleDAOMyBatis sample = new SampleDAOMyBatis();
    	int count = sample.selectTableCount();
    %>
    
    <h1>테이블 수 : <%=count %></h1>

SampleDAOMyBatis 객체를 생성해주고

만들었던 메소드를 불러오자

 

성공 화면