MyBatis 세팅

1. 라이브러리 추가

jstl, standard, ojdbc, mybatis 모두 프로젝트 내에 추가해주자

2. src 폴더에 패키지 생성 및 properties 파일 생성

패키지 명은 db.setting, 이 안에 dbserver.properties 파일을 만들고 다음 내용을 적는다

DRIVER=oracle.jdbc.driver.OracleDriver
URL=jdbc:oracle:thin:@192.168.0.49:1521:xe
USERNAME=acorn03
PASSWORD=a1234

url, username, password는 상황에 맞게 바꿔주자

3. DTO 만들기

같은 패키지 내에 오라클에서 만들어둔 테이블과 일치하는 DTO를 만든다. Getter, Setter도 모두 만들어 준다

4. SqlMapConfig.xml 만들기

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
  <properties resource="db/setting/dbserver.properties"/>
  <typeAliases>
    <typeAlias type="db.setting.PersonDto" alias="pdto"/>
  </typeAliases>
  
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${DRIVER}"/>
        <property name="url" value="${URL}"/>
        <property name="username" value="${USERNAME}"/>
        <property name="password" value="${PASSWORD}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="db/setting/PersonSql.xml"/>
  </mappers>
</configuration>

여기서는 예시로 PersonDto를 만들어서 진행했는데, 여러개의 Dto가 존재한다면 typeAlias는 여러개 선언해도 괜찮다. 굳이 별칭 주고 싶지 않다면 안줘도 된다(사용 빈도가 높지 않은 DTO라면..)

5. Sql.xml 추가

자 이제 실직적인 sql문을 작성할 파일은 만든다. 취향따라 다르지만 한 파일에 모든 sql문을 짱박아도 되고, Dto마다 파일을 나눠서 관리해도 되고, 용도에 따라 나눠서 관리해도 된다. (사실 어떤게 가장 좋은 방법인지는 모르겠다. 내가 볼땐 용도에 따라 나눠 관리하는게 가장 좋아보이긴 하는데…)

personSql.xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="person">
  <select id="personTotalCount" resultType="int">
    <!-- 절대 sql문에 세미콜론 주지 말것! -->
    select count(*) from mybatistbjh
  </select> 
</mapper>

select 문이라면 select 태그 안에, id는 나중에 DAO에서 부를때 쓰는 속성이고, resultType은 쿼리문 실행 결과 나올 타입을 지정해주면 된다. 타입이 여러가지일 경우는 HashMap으로 받아도 되고… 이건 뒤에서 자세히 언급하겠다.

절대 sql문에 세미콜론을 주지 않도록 주의하자. 더불어 꺽쇠 괄호 <, > 를 사용해야 하는 경우는 태그 시작과 끝을 알리는 것과 구분이 안되므로 다른 방법을 써야한다. (추후 수정)

6. ConnectionManager 클래스 생성

package db.setting;

import java.io.IOException;
import java.io.Reader;
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 ConnectionManager
{
  private static ConnectionManager instance;
  public static ConnectionManager getInstance()
  {
    if(instance == null)
      instance = new ConnectionManager();
    return instance;
  }

  private SqlSessionFactory sqlSessionFactory;

  private ConnectionManager()
  {
    String resource = "db/setting/SqlMapConfig.xml"; //이거 반드시 수정
    try
    {
      Reader reader = Resources.getResourceAsReader(resource);
      sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }
  }

  public SqlSession openSession()
  {
    return sqlSessionFactory.openSession(true);
  }
}

7. DAO 만들기

DAO 클래스도 DTO마다 만들어줘도 되고, 용도별로 만들어줘도 된다. 근데 하다보면 결국 용도별 DAO로 만들게 되던데 ….?

personDao.class

package db.setting;

import org.apache.ibatis.session.SqlSession;

public class personDAO {
  ConnectionManager conn = ConnectionManager.getInstance();
  SqlSession session;
  private SqlSession getSession() {
    session = conn.openSession();
    return session;
  }

  //각 메서드 
  public int getTotalCount() {
    session = getSession();
    int n = session.selectOne("personTotalCount"); //id를 가져온다 
    session.close();
    return n;
  }
}

8. jsp 파일 만들기

출력 예시를 만든다

<b>총 ${total }개의 데이타가 있습니다.</b> 

9 . servlet 파일 생성

위 세팅과정에서는 모두 db.setting 패키지에서 진행했지만 servlet파일들은 다른 패키지에 저장하도록 하자. person.servlet 패키지를 새로 만들었다.

package person.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import db.setting.personDAO;

/**
	 * Servlet implementation class ListServlet
	 */
@WebServlet("/list.do")
public class ListServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    personDAO dao = new personDAO();
    int total = dao.getTotalCount();
    request.setAttribute("total", total);
    RequestDispatcher rd = request.getRequestDispatcher("list.jsp");
    rd.forward(request, response);
  }

  /**
	* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	*/
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
  }

}

10. index.jsp 수정

<c:redirect url="list.do" />

Categories:

Updated:

Comments