반응형

# MVC05_01 JDBC와 MyBatis 설정

## MVC04 import 하여 MVC05로 변경

  • Project Explorer 에서 빈 공간 우 클릭 > Import > MVC04 WAR File 찾아서 클릭 후 프로젝트 이름을 MVC05로 변경

## 톰캣 서버 등록

  • Servers > 톰캣 우 클릭 > Add and Remove > Available 에서 MVC05 클릭 후 Add하여 Configured로 이동 후 Finish.

## 톰캣 서버 등록 확인

  • Servers > 톰캣 서버 더블클릭 > Modules에 MVC05 정상적으로 등록되어있는지 확인.

## 기존 JDBC와 MyBatis

1. 기존 JDBC

  • 소스코드 안에 중요 정보(데이터베이스 접속 정보, 아이디, 패스워드 등) 포함.
  • 자바 소스코드 + SQL 명령문이 섞어있어(임베디드) 유지보수 시 문제 발생 가능성 존재.
  • JDBC 이용 시 개발자가 모두 직접해야 하기 때문에 개발 속도가 상당히 늦어진다.
  • 그래서 이러한 단점 등을 해결하기 위해 MyBatis API를 이용 할 예정.

2. MyBatis

  • MyBatis의 핵심은 기존 JDBC (자바 소스코드 + SQL)에서 자바 소스코드와 SQL 쿼리를 분리 시키자는 것.
  • 자바 소스코드에서 분리된 SQL과 어떻게 연결해서 사용할지에 대한 방법론과 이 방법론을 실제 구현해 줄 API가 MyBatis이다.
  • MyBatis란 자바에서 SQL Mapping해서 사용하는 프레임워크, 한마디로 SQL Mapping Framework

## MyBatis 설정 파일 3개.

  • 프로젝트 > src 에서 마우스 우 클릭 > Package > kr.bit.mybatis 이름의 패키지 생성
  • MyBatis 이용을 위해서는 기본적으로 3개의 설정 파일 필요. 
  • https://blog.mybatis.org/p/products.html
 

Products

A blog about the the MyBatis data mapper framework.

blog.mybatis.org

위 사이트에서 해당항목의 docs => MyBatis 설명서

 

mybatis – MyBatis 3 | Getting started

It's very important to understand the various scopes and lifecycles classes we've discussed so far. Using them incorrectly can cause severe concurrency problems. Dependency Injection frameworks can create thread safe, transactional SqlSessions and mappers

mybatis.org

1. The configuration XML File (MyBatis 환경설정 파일) => 가장 중요

  • 아래와 같은 형식의 파일.
  • 해당파일로 연결을 하기 떄문에 3개의 설정 파일 중 가장 중요하다.
<?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">
        <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="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>
  • 프로젝트 우 클릭 > src > 생성한 패키지(kr.bit.mybatis) 우 클릭 > New > Other >XML File 클릭 후 Next > config.xml 이름의 xml 파일 생성

2. Properties File (데이터베이스 접속 URL, 드라이버 정보, 사용자 ID, PW 등의 정보를 저장해 주는 파일)

  • 프로젝트 우 클릭 > src > 생성한 패키지(kr.bit.mybatis) 우 클릭 > New > Other > File 클릭 후 db.properties 이름의 파일 생성.
  • properties 파일은 key=value 형식으로 저장
  • 아래와 같이 작성(공백 없도록 주의)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimeZone=UTC
username=root
password=비밀번호

3. Mapper XML File (SQL 문장을 저장할 파일)

  • 아래와 같은 형식의 파일.
<?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="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>
  • 프로젝트 우 클릭 > src > 생성한 패키지(kr.bit.mybatis) 우 클릭 > New > Other >XML File 클릭 후 Next > MemberMapper.xml 이름의 xml 파일 생성

 

# MVC05_02 Connection Pool

## MyBatis API 설치

 

Releases · mybatis/mybatis-3

MyBatis SQL mapper framework for Java. Contribute to mybatis/mybatis-3 development by creating an account on GitHub.

github.com

  • 다운로드 받은 mybatis-3.4.6 압축해제 후 mybatis-3.4.6.jar 파일을 복사해서 프로젝트 > WebContent > WEB-INF > lib에 복사

## Connection Pool 기법

  • 자바에서 데이터베이스를 연동하기위해 Connection이 필요. 이때 Connection에 부하가 많이 걸리는데, JDBC에서는 DB에 연결할 일이 생길 때 Connection을 생성, 사용 후 Connection을 끊는데.. 유저가 많아지면 점점 부하가 많이 걸리게 된다.
  • MyBatis는 위 과정에서 Connection을 사용 후 Connection을 제거하는게 아닌, 재활용하자는 취지. (성능 개선)
  • MyBatis는 여러개의 커넥션을 메모리에 미리 생성. (Connection Pool)
  • DB작업을 위해 자바에서 Connection Pool에 미리 만들어진 커넥션을 꺼내와서 사용 후 반환(객체 사용 후 반환)
  • JDBC에서는 연결된 객체를 Connection 라고 부르고, MyBatis에서는 Connection을 sqlSession이라고 부른다.

## sqlSessionFactory

  • 기존 MemberDAO에서 DB 관련 연결 소스코드 제거.
  • config.xml로부터 sqlSessionFactory 생성을 위해 코드 작업
package kr.bit.model;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

// JDBC -> MyBatis
public class MemberDAO {
	private static SqlSessionFactory sqlSessionFactory;	// DB를 연결하고 있는 객체들이 존재.
	
	// 초기화 블럭 => 프로그램 실행 시 딱 한번만 실행되는 코드.
	static {
		try {
			String resource = "kr/bit/mybatis/config.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);	// 읽기
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}	
}

 

 

 

 

 

반응형

+ Recent posts