2 minute read

MyBatis(마이바티스)

JDBC를 대체하는 SQL매핑 프레임워크다. SQL을 기반으로 DB와 자바 등의 언어를 연결시켜주는 역할을 한다. 소스 코드에서 SQL문장을 분리하여 별도의 XML파일로 작성한 후 소스 코드와 연결한다. 즉, SQL구문 실행에 필요한 코드의 복잡한 구조를 단순화하는데 사용되는 프레임워크다.

  1. 장점
    자동으로 Connection객체를 반환(close)한다.
  2. 장점
    내부적으로 PreparedStatement객체를 사용하여 SQL구문을 처리(자동)한다.
  3. 장점
    리턴 타입 지정을 통해 자동으로 해당 타입 객체 생성 및 ResultSet 객체 등에 대한 처리(자동)를 한다.
  4. 장점
    파라미터 지정을 통해 SQL 구문에서 사용할 데이터를 전달 처리(자동)한다.

pom.xml 파일 설정

pom.xml에 JDBC 연동에 필요한 라이브러리를 추가한다.

  1. 스프링에서 JDBC 연동에 필요한 기능을 제공하는 spring-jdbc 라이브러리

     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-jdbc</artifactId>
         <!-- <version>5.3.30</version> -->
         <!-- 별도의 버전을 명시하기 보다 스프링의 기본 버전을 그대로 사용 -->
         <version>${org.springframework-version}</version>
     </dependency>
    

    https://mvnrepository.com/artifact/org.springframework/spring-jdbc

  2. MySQL Connector(JDBC 드라이버) 라이브러리 추가

     <dependency>
         <groupId>com.mysql</groupId>
         <artifactId>mysql-connector-j</artifactId>
         <version>8.0.33</version>
     </dependency>
    

    https://mvnrepository.com/artifact/com.mysql/mysql-connector-j

  3. 커넥션 풀을 관리하는 라이브러리 추가
    HikariCP 라이브러리를 활용(Tomcat DBCP 대용으로 사용 가능)하면 Tomcat DBCP에 비해 가볍고, 빠르고, 안정적인 처리를 할 수 있다.

         <dependency>
             <groupId>com.zaxxer</groupId>
             <artifactId>HikariCP</artifactId>
             <version>5.0.1</version>
         </dependency>
    

    Java 11 이상이면 mvnrepository.com 대신 https://github.com/brettwooldridge/HikariCP 접속 후 Artifacts 항목의 Java 11+ maven artifact 부분 라이브러리 태그 복사 붙여넣기.

  4. MyBatis 활용에 필요한 라이브러리 추가
    • MyBatis 기본 라이브러리

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
      

      https://mvnrepository.com/artifact/org.mybatis/mybatis

    • MyBatis - Spring 연동 라이브러리

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.1.1</version>
        </dependency>
      

      주의! 3.x.x 버전 사용 시 JDK 11 에서 오류 발생(지원 불가) => 2.x.x 버전 사용.
      https://mvnrepository.com/artifact/org.mybatis/mybatis-spring

  5. VO 클래스의 요소 자동 관리를 위한 Lombok 라이브러리

     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.18.30</version>
         <scope>provided</scope>
     </dependency>
    

    이클립스 환경에서 라이브러리 추가와 별개로 플러그인 설치가 필요하다.
    https://mvnrepository.com/artifact/org.projectlombok/lombok

root-context.xml 설정

먼저 파일을 연 후 아래쪽 탭 중 Namespaces탭을 클릭 후 mybatis-spring항목을 체크한다.
HikariCP 라이브러리 사용을 위한 설정(커넥션풀 설정)들이다.

  1. HikariCP를 활용한 DB접속 정보 설정을 위한 HikariConfig객체 설정(JDBC 기본 설정)

    <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/study_spring3"></property>
        <property name="username" value="root"></property>
        <property name="password" value="1234"></property>
    </bean>
    

    기존 톰캣 DBCP 사용 시 context.xml에 설정했던 내용이다. com.zaxxer.hikari 패키지의 HikariConfig 클래스 지정 및 속성 설정이다. property 태그를 활용하여 DB 접속에 필요한 정보 4가지 속성을 설정한다.

  2. HikariCP를 통해 커넥션을 관리하는 DataSource객체(HikariDataSource) 설정

     <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
         <constructor-arg ref="hikariConfig"></constructor-arg>
     </bean>
    

    생성자 파라미터로 1번에서 생성한 HikariConfig객체를 전달한다.

  3. Connection객체를 생성, 쿼리 전달 및 결과 리턴 등의 작업을 수행할 SQLSession(Factory)객체 설정
    MyBatis - Spring 연결을 담당하며, 내부적으로 SQLSession 객체를 통해 작업을 수행한다.

     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="dataSource" ref="dataSource"></property>
         <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
         <property name="mapperLocations" value="classpath:/com/mytest/mytest/mapper/*Mapper.xml"></property>
     </bean>
    

    주의할 점

    • 이전에 이미 DataSource객체 설정이 완료되어 있어야 한다.
    • 태그의 id 값, class 값은 고정이다.
    • 태그의 dataSource, configLocation, mapperLocations 이름도 고정이다.
    • configLocation, mapperLocations 속성(항목)에 지정된 각각의 파일(xml)이 실제 위치에 생성되어 있어야 한다.
      설정 항목 중 classpath가 가리키는 기본 위치 : src/main/resources 패키지

mybatis-config.xml, *Mapper.xml 설정

위에서 설정했던 configLocation과 mapperLocations의 속성에 지정된 파일을 만들어 준다.

  • mybatis-config.xml
    위에서 설정한 경로대로 src/main/resources/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></configuration>
    
  • *Mapper.xml
    위에서 설정한 경로대로 src/main/resources/com/mytest/mytest/mapper/StudentMapper.xml에 만든다.

      <?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="com.mytest.mytest.mapper.StudentMapper">
          <insert id="insertStudent">
              INSERT INTO student
              VALUES (
                  null  -- 주석인 문장.  
                  , #{name}
              )
          </insert>
      </mapper>
    

    mapper태그 사이에 SQL문을 작성한다.
    주석은 “– “을 사용한다.

Leave a comment