ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [WEB:] mybatis 마이바티스 시작하기 - 설치 및 설정
    비전공자 공부일기/:: WEB & Front-End 2019. 8. 21. 17:01

    2019. 08. 21 필기

     

     

     

    mybatis 마이바티스란?

    - 자바의 DataBase 프로그래밍을 더 쉽게 도와주는 개발 프레임워크 종류이다.

     

     

    아이바티스 3.0이 되면서 구글이 인수했고, 마이바티스로 이름이 바뀜

     

    퍼시스턴스 프레임워크 : DAO 클래스를 만들어주기 위한 프레임워크

    POJO : Plain Old Java Object, 직역하면 평범하고 오래된 자바 객체. 

     

     

    마이바티스 다운로드 및 설치

     

    MyBatis > Products

    https://blog.mybatis.org/p/products.html

     

     

    MyBatis > Products > docs

    http://www.mybatis.org/mybatis-3/ko/getting-started.html

     

    MyBatis – 마이바티스 3 | 시작하기

    이제부터 다룰 스코프와 생명주기에 대해서 이해하는 것은 매우 중요하다. 스코프와 생명주기를 잘못 사용하는 것은 다양한 동시성 문제를 야기할 수 있다. 의존성 삽입 프레임워크는 쓰레드에 안전하도록 해준다. 트랜잭션 성질을 가지는 SqlSessions과 매퍼들 그리고 그것들을 직접 빈에 삽입하면 생명주기에 대해 기억하지 않아도 되게 해준다. DI프레임워크와 마이바티스를 사용하기 위해 좀더 많은 정보를 보기 위해서는 MyBatis-Spring이나 MyBatis

    www.mybatis.org

     

     

     

     

     

     

     

    MyBatis > Products > download

    https://github.com/mybatis/mybatis-3/releases

     

     

     

    mybatis-3.5.2.jar
    1.62MB

     

     

    Dynamic Web Project (web.xml 파일 생성된 것) > WebContent > WEB-INF > lib 폴더에 붙여넣기 하면 자동 빌드

     

    뿐만 아니라 

     

     

     

     

    마이바티스 로깅 LOGGING

     

    로그는 개발자에게 굉장히 중요한 요소이다.

    일단 로그라는 건, 쉽게 말하면 이클립스 콘솔에 뜨는 오류 또는 결과 표시 정보라고 보면 된다.

     

    마이바티스의 로깅에 대한 설명은 다음 링크에서 더 자세히 볼 수 있다.

     

    http://www.mybatis.org/mybatis-3/ko/logging.html

     

    MyBatis – 마이바티스 3 | 로깅

    Logging 마이바티스는 내부 로그 팩토리를 사용하여 로깅 정보를 제공한다. 내부 로그 팩토리는 로깅 정보를 다른 로그 구현체 중 하나에 전달한다. SLF4J Apache Commons Logging Log4j 2 Log4j JDK logging 로깅 솔루션은 내부 마이바티스 로그 팩토리의 런타임 체크를 통해 선택된다. 마이바티스 로그 팩토리는 가능하면 첫번째 구현체를 사용할 것이다(위 로깅 구현체의 나열 순서는 내부적으로 선택하는 우선순위이다). 만약

    www.mybatis.org

     

     

    그럼 이제 마이바티스 로깅을 설정해보겠다.

    log4j 라는 이름을 가진 설정 파일을 생성해주면 되는데,

    이름을 반!드!시! 지켜주어야 한다.

     

    강사님께서는

    log4j.properties 파일을 만드는 것도 좋지만

    log4j.xml 파일을 이용하는 것을 권장하심.

    왜? properties 파일은 한글 안나옴ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

    (** 되새김 : xml 파일은 환경설정파일임)

    마이바티스 블로그의 예시 속 # 한글주석은 거짓말이다!!

     

    log4j.xml 파일 생성 위치는

    Dynamic Web Project > Java Resources > src 폴더이다.

    (다른 곳에 만들려면 여러 설정을 더 만져줘야 함)

     

    내용은 아래와 같이 써준다.

     

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    	<appender name="console" class="org.apache.log4j.ConsoleAppender"> <!-- 뭘로 기록할건지 -->
    		<layout class="org.apache.log4j.PatternLayout"> : <!-- 어떻게 기록할건지 -->
    			<param name="ConversionPattern" value="%-5p - %m%n"/>
    		</layout> 
    	</appender>
    	
    	<root>
    		<level value="DEBUG"/>
    		<appender-ref ref="console"/>
    	</root>
    </log4j:configuration>

     

    에러는 에러가 떨어졌을 때만 기록되지만

    디버그는 모두 기록됨

     

     

    sqlSessionFactory 빌드하기

     

    sqlSessionFactory는 일종의 커넥션풀과 같은 역할을 한다.

    이번에는 xml파일의 이름을 마음대로 설정해도 상관없다.

    사용자가 클래스를 생성해줄 것이기 때문

     

    DAO파일을 이용하기 위해

    sql명령을 전달하고 결과를 받을수 있는 환경을 조성해주어야 함

     

    <?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 : 다수의 property 엘리먼트를 제공하기 위한 상위 엘리먼트 -->
      <!-- resource 속성 : Properties 파일의 경로를 속성값으로 설정 -->
      <!-- => 패키지에 Properties 파일이 존재하는 경우 파일 경로로 표현(즉, . 이 아니라 / 로 표현) - ex) site/itwill/config/ -->
      <properties resource="db.properties">
      		<!-- property : XML 파일에서 사용할 수 있는 값을 제공하는 엘리먼트 -->
      		<!-- name 속성 : property 엘리먼트의 고유값을 속성값으로 설정 -->
      		<!-- value 속성 : 제공하고자 하는 값을 속성값으로 설정 -->
      		<!-- => XML 파일에서 ${속성명 } 형식으로 표현하여 속성값 사용 가능 -->
      		<!-- <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>  -->
    		<!-- <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>  -->
    		<property name="username" value="scott" />
    		<property name="password" value="tiger" />
      </properties>
      
      
      <settings>
      	<!-- setting : Mybatis 실행에 필요한 정보를 제공하기 위한 엘리먼트 -->
      	<!-- => 실행 관련 정보에 대한 기본값이 존재하므로 기본값이 아닌 다른 값을 사용하고 싶을 때만 선언 -->
      	<setting name="jdbcTypeForNull" value="NULL" />
      	<setting name="callSettersOnNulls" value="true" />
      </settings>
      
    	<!-- typeAliases : 다수의 typeAlias 엘리먼트를 제공하기 위한 상위 엘리먼트 -->
    	<typeAliases>
    		<!-- JavaType(PrimitiveType 또는 ReferenceType)에 별명을 제공하는 엘리먼트 -->
    		<!-- => Mapper 파일에서 파라메터 자료형 또는 반환 자료형 대신 사용하기 위한 별명 -->
    		<!-- => JavaBean(DTO) 클래스에 별명을 부여하여 Mapper 파일에서 사용 -->
    		<!-- type 속성 : JavaType을 속성값으로 설정 -->
    		<!-- alias 속성 : 별명을 속성값으로 설정 -->
    		<typeAlias type="site.itwill.dto.StudentDTO" alias="StudentDTO"/>
    	</typeAliases>
      
    	<!-- environments : 다수의 environment 엘리먼트를 제공하기 위한 상위 엘리먼트 -->
    	<!-- default 속성 : environment 엘리먼트의 고유값 중 하나를 속성값으로 설정 -->
    	<!-- => 기본으로 사용하기 위한 SqlSessionFactory 인스턴스를 제공하기 위해 사용 -->
    	<environments default="development">
    		<!-- environment : SqlSessionFactory 인스턴스를 생성하기 위한 정보를 제공하는 엘리먼트 -->
    		<!-- id 속성 : environment 엘리먼트의 고유값을 속성값으로 설정 -->
    		<environment id="development">
    			<!-- transactionManager : 트렌젝션 관리에 필요한 정보를 제공하는 엘리먼트 -->
    			<!-- type 속성 : JDBC(Mybatis) 또는 MANAGER(외부 매니저) 중 하나를 속성값으로 설정 -->
    			<transactionManager type="JDBC"/>
    			<!-- dataSource : Connection 인스턴스를 생성하기 위한 정보를 제공하는 엘리먼트 -->
    			<!-- type 속성 : UNPOOLED, POOLED, JNDI 중 하나를 속성값으로 설정 -->
    			<dataSource type="POOLED">
    			<!-- property : Connection 인스턴스 생성을 위한 값을 제공하기 위한 엘리먼트 -->
    			<!-- name : property 엘리먼트의 고유값을 속성값으로 설정 -->
    			<!-- value : 제공하고자 하는 값을 속성값으로 설정 -->
    			<!-- ==> XML 파일에서 ${속성명 } 형식으로 표현하여 속성값 사용 가능 -->
    <!-- 			
    			<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
    			<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
    			<property name="username" value="scott"/>
    			<property name="password" value="tiger"/>
     -->
     			<!-- 아래처럼 EL로 표현하면 유지보수가 용이함!  -->
    			<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 엘리먼트를 제공하기 위한 상위 엘리먼트 -->
      <mappers>
      	<!-- mapper : Mapper 파일을 제공하기 위한 엘리먼트 -->
      	<!-- Mapper 파일 : SQL 명령이 등록된 파일 - XML Mapper 또는 Interface Mapper -->
      	<!-- XML Mapper : ibatis & mybatis에서 사용 가능 / Interface Mapper : mybatis에서만 사용 가능 -->
      	
      	<!-- resource 속성 : XML Mapper 파일의 경로(파일 경로 표현)를 속성값으로 설정 -->
      	<mapper resource="site/itwill/mapper/StudentMapper.xml" />
      </mappers>
      </configuration>

     

    위 요소들 중에서 environments / mappers 는 필수적으로 들어가야 하는 요소들이다.

    >> environment : 일종의 커넥션풀 역할 --> connection을 만들어내는 역할

    >>>> SqlSessionFactory 인스턴스를 통해 SqlSession 생성

    >> mapper 파일 : sql 명령을 저장하고 있는 파일

     

     

    위 xml 파일이 없으면 마이바티스를 이용할 수 없음

     

     

     

     

    매핑 설정 Mapping

     

    mybatis에서 Mapper 파일이란 SQL 명령이 등록된 파일을 말한다.

     

     

     

     

    MyBatis 블로그 > product > 매퍼 설정 에서

    XML 설정파일에서 사용 가능한 configuration 하위 속성들이 소개되어 있다.

     

     

    <?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 파일 : SQL 명령이 등록된 파일 -->
    <!-- mapper : SQL 명령을 등록하기 위한 루트 엘리먼트 -->
    <!-- namespace 속성 : mapper 엘리먼트의 고유값을 속성값으로 설정 - ibatis(선택), mybatis(필수) -->
    <!-- => 속성값은 Mapper 파일명을 JavaType 표현 형식으로 설정하는 것을 권장 -->
    <mapper namespace="site.itwill.mapper.StudentMapper">
    	<!-- select : SELECT 명령을 등록하기 위한 엘리먼트 -->
    	<!-- id 속성 : 엘리먼트의 고유값을 속성값으로 설정 -->
    	<!-- resultType 속성 : SQL 명령 실행 후 발생되는 결과를 반환하는 Java 자료형(PrimitiveType, JavaBean, Map 등) -->
    	<!-- => 검색 컬럼값이 JavaBean(DTO) 인스턴스의 필드값으로 자동 매핑되어 저장 -->
    	<!--  
    	<select id="getStudentList" resultType="site.itwill.dto.StudentDTO">
    		select * from student order by no
    	</select>
    	-->
    	
    	<!-- typeAlias 엘리먼트를 이용하면 JavaType 대신 별명을 사용하여 설정 -->
    	<select id="getStudentList" resultType="StudentDTO">
    		select * from student order by no
    	</select>
    </mapper>

     

     

    select 요소에는 resultType 속성이 반드시 포함되어야 한다.

    댓글

coding wanee