Mybatis1 : Mybatis 도입

업데이트:
2 분 소요

비트캠프 서초본원 엄진영 강사님의 수업을 듣고 정리했습니다.


Mybatis1 : Mybatis 도입

Data Persistence Framework

  • 데이터의 영속성(지속성; 등록,조회,변경,삭제)을 대신 처리해주는 프레임워크.

1. SQL Mapper

  • 직접 SQL 문을 작성 하기 때문에 각각의 DBMS에 최적화된 SQL을 작성할 수 있다.
  • 그러나 DBMS마다 미미하게 다른 SQL을 작성해야 하는 번거로움이 있다.
  • 예) Mybatis

2. OR Mapper

  • 전용언어 및 문법(Domain-Specific Language;DSL)을 사용하여 작성
  • 실행할 때 DBMS에 맞춰서 SQL을 생성하여 실행한다.
  • DBMS에 마다 SQL문을 작성할 필요가 없어 편리하지만, BMS에 최적화된 SQL을 실행할 수 없다. 즉 DBMS의 특징을 최대로 활용할 수 없다.
  • 예) Hibernate, TopLink 등

3. Mybatis 도입

(1) 의존 라이브러리 추가

  • mvnrepository.com 검색하여 build.gradle 파일에 추가한다.
  • gradle eclipse 실행한 후 이클립스 에디터에서 프로젝트를 refresh 한다.

(2) mybatis 설정 파일 준비

mybatis-config.xml을 생성하고 편집한다.

Properties

  • jdbc.properties 파일의 내용을 읽어온다. 읽어온 정보는 ${프로퍼티명} 문법을 이용하여 그 값을 사용할 수 있다.
<properties resource="com/eomcs/mybatis/ex01/jdbc.properties"></properties>

environments

  • DBMS에 연결할 때 사용할 정보를 설정한다.
  • 여러 개의 연결 정보를 설정해두고 그 중에 사용할 정보를 지정할 수 있다.
  • default="development"의 의미는, 여러 연결 정보 중에서 development라는 연결 정보를 사용하여 실행하겠다는 의미다.
<environments default="development"> ... </environments>
  • 각각의 연결 정보는 다음과 같이 environment 태그에 설정한다.
<environment id="development"> ... <environment>

transactionManager

  • 트랜잭션 관리 방식을 지정한다. 아래 코드에서는 JDBC API를 사용한다는 의미이다.
  • 트랜잭션을 관리한다는 것은 커넥션 객체에 대해서 대신 commit과 rollback을 한다는 의미이다.
<transactionManager type="JDBC"/>

dataSource

  • DB 커넥션 풀에 관련된 정보와 DB 연결 정보를 설정한다.
  • 이제 개발자가 DB 커넥션 풀을 다룰 필요가 없다. mybatis 프레임워크에서 관리한다.
<dataSource type="POOLED">
  <!-- ${위의 .properties 파일에 저장된 프로퍼티명} -->
  <property name="driver" value="${jdbc.driver}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
</dataSource>

mappers

  • SQL문을 모아둔 파일(SQL 맵퍼 파일이라 부른다)을 지정한다.
  • SQL 맵퍼 파일에 작성해 둔 SQL문을 mybatis가 사용할 것이다.
  • 맵퍼 파일의 경로를 지정할 때 classpath 경로를 사용해야 한다.
  • 단 패키지명을 구분할 때 . 대신에 /를 사용해야 한다
<mappers>
  <mapper resource="com/eomcs/mybatis/ex01/BoardMapper.xml"/>
	<mapper resource="com/eomcs/mybatis/ex01/XxxxMapper.xml"/>
</mappers>

mybatis-config.xml

  • 하나의 파일로 작성된 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>
  <properties resource="com/eomcs/mybatis/ex01/jdbc.properties"></properties>

  <environments default="development">
    
    <environment id="development">
    
      <transactionManager type="JDBC"/>

      <dataSource type="POOLED">
        <property name="driver"   value="${jdbc.driver}"/>
        <property name="url"      value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
      </dataSource>
    </environment>
  </environments>
 
  <mappers>
    <mapper resource="com/eomcs/mybatis/ex01/BoardMapper.xml"/>
		<mapper resource="com/eomcs/mybatis/ex01/XxxxMapper.xml"/>
  </mappers>
</configuration>

(3) DB 연결 정보를 담은 프로퍼티 파일 준비

jdbc.properties

# key=value
jdbc.driver=org.mariadb.jdbc.Driver
jdbc.url=jdbc:mariadb://localhost:3306/studydb
jdbc.username=study
jdbc.password=1111

(4) SQL 문장을 작성할 파일 준비

BoardMapper.xml

  • SQL 문장을 찾을 때 사용할 그룹명을 설정한다.
  • 보통 그룹명은 SQL 맵퍼 파일이나 그 파일이 있는 경로를 그룹명으로 지정한다. 또는 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="BoardMapper">
  <select id="selectBoard" resultType="com.eomcs.mybatis.ex01.Board">
    select 
      board_id,
      title,
      contents,
      created_date,
      view_count
    from x_board
  </select>
  
  <select id="selectBoard2" resultType="com.eomcs.mybatis.ex01.Board">
    select 
      board_id as no,
      title,
      contents as content,
      created_date registeredDate,
      view_count viewCount
    from x_board
  </select>
</mapper>

(5) Mybatis 객체 준비

  String resource = "org/mybatis/example/mybatis-config.xml";
  InputStream inputStream = Resources.getResourceAsStream(resource);
  SqlSessionFactory sqlSessionFactory =
    new SqlSessionFactoryBuilder().build(inputStream);

태그:

카테고리:

업데이트: