[JAVA Framework] MyBatis

작성일     업데이트:

카테고리:

태그:

MyBatis

MyBatis 란

데이터의 입력/조회/수정/삭제(CRUD)를 보다 편하게 하기 위해 xml로 구조화한 Mapper 설정파일을 통해 JDBC를 구현한 영속성 프레임 워크.
기존 JDBC를 통해 구현했던 상당부분의 코드와 파라미터 설정 및 결과 매핑을 xml설정을 통해 쉽게 구현할 수 있게 했다.


MyBatis 동작 구조

  • 위의 사용 객체들은 mybatis-x.x.x.jar 파일에 존재한다

MyBatis 적용

  • 라이브러리 적용

    • 일반

      • mybatis-x.x.x.jar 라이브러리를 프로젝트 내 ‘WEB-INF/lib/’경로에 추가
    • Spring Project

      • pom.xml에 dependency 추가
      • preferences -> XML -> XML Catalog 메뉴에서 아래 값들 등록
        => “http://mybatis.org/dtd/mybatis-3-config.dtd” / “-//mybatis.org//DTD Config 3.0//EN”
        => “http://mybatis.org/dtd/mybatis-3-mapper.dtd” / “-//mybatis.org//DTD Mapper 3.0//EN”

  • mybatis-config.xml 생성

    • ‘resources’라는 Source Folder를 생성하고 mybatis-config.xml 파일 생성
  • 일반

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">

<!--
	이 문서의 형식이 configuration(환경설정)임을 알려줌
	=> 최상위 타입이 configuration
	DTD : 유효성을 체크해줌(현재 xml파일 안에 작성한 태그들이 configuration안에 존재해도 되는지를 체크해줌)
 -->

<configuration>
	<!-- setting : Mybatis 구동시 선언할 설정들을 작성하는 영역 -->
	<settings>
		<!-- 만약에 NULL로 데이터가 전달되었다면 빈칸이 아닌 NULL로 인식하겠다는 뜻 -->
		<setting name="jdbcTypeForNull" value="NULL"/>

		<!-- DB에서 컬럼명 _로 되어있는거 자동 camelCase화 시켜주는 설정 -->
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>

	<!-- typeAliases : VO클래스들의 풀 클래스명을 단순한 클래스명으로 줄여서 부르기 위한 "별칭"등록 영역 -->
	<typeAliases>
		<typeAlias type="com.kh.mybatis.member.model.vo.Member" alias="member"/>
		<typeAlias type="com.kh.mybatis.board.model.vo.Board" alias="board"/>
		<typeAlias type="com.kh.mybatis.board.model.vo.Reply" alias="reply"/>
	</typeAliases>


	<!-- environments : mybatis에서 연동할 DB정보들을 등록하는 영역(여러개 DB정보 등록가능)
		=> default속성으로 여러개의 id중 어떤 db를 기본 db로 사용할건지 설정해줘야한다
	-->
	<environments default="development">

		<environment id="development">

			<!-- transactionManager는 JDBC와 MANAGED 둘중 하나 선택가능
				JDBC : 트랜잭션을 내가 직접 관리하겠다(수동 commit)
				MANAGED : 개발자가 트랜잭션 관리에서 어떠한 영향도 끼치지 않겠다(자동 commit)
			 -->
			<transactionManager type="JDBC" />

			<!-- * dataSource로는 POOLED, UNPOOLED 둘 중 하나 선택할 수 있음(ConntecionPool 사용 여부)
				- ConnectionPool : Connection 객체를 담아줄 수 있는 영역
									한번 생성된 Connection객체를 담아두면 재사용해서 쓸 수 있음
				=> POOLED : ConnectionPool을 사용하겠다
				(DB랑 연결할때마다 약간씩 시간이 필요한데 그걸 단축시킬 수 있음, 다만 설정할 정보들이 늘어남)
				=> UNPOOLED : ConnectionPool을 사용하지 않겠다
			 -->
			<dataSource type="POOLED">
				<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
				<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
				<property name="username" value="MYBATIS" />
				<property name="password" value="MYBATIS" />
			</dataSource>
		</environment>
	</environments>

	<!-- mappers : 실행할 sql문들을 기록해둔 mapper파일들을 관리하는 태그 -->
	<mappers>
		<mapper resource="/mappers/member-mapper.xml" />
		<mapper resource="/mappers/board-mapper.xml" />
	</mappers>
</configuration>
  • Spring Project
<?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>
	<settings>
		<setting name="jdbcTypeForNull" value="NULL"/>

		<setting name="logImpl" value="LOG4J"/>
		<!--
			마이바티스 쿼리문, 파라미터값, 실행결과를 로그를 통해 확인하기 위한 설정정보
		 	(실제 운영환경에서는 제거해야한다 - 로그가 엄청 길게 쌓이기 때문에 데이터를 많이 잡아먹음)
		 	value값에는 로그 출력 구현객체로  LOG4J라는 클래스를 지정함(MVC프로젝트를 만들면 자동으로 추가되어있음)
		 -->

		<!-- DB에서 컬럼명 _로 되어있는거 자동 camelCase화 시켜주는 설정 -->
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>

	<typeAliases>
		<typeAlias type="com.kh.spring.member.model.vo.Member" alias="member"/>
		<typeAlias type="com.kh.spring.board.model.vo.Board" alias="board"/>
		<typeAlias type="com.kh.spring.board.model.vo.BoardImg" alias="boardImg"/>
		<typeAlias type="com.kh.spring.board.model.vo.BoardType" alias="boardType"/>
		<typeAlias type="com.kh.spring.board.model.vo.Reply" alias="reply"/>

		<typeAlias type="com.kh.spring.chat.model.vo.ChatRoomJoin" alias="chatRoomJoin"/>
		<typeAlias type="com.kh.spring.chat.model.vo.ChatRoom" alias="chatRoom"/>
		<typeAlias type="com.kh.spring.chat.model.vo.ChatMessage" alias="chatMessage"/>
	</typeAliases>

	<!--
		enviroments, datasource에 기술했던 db연결정보는 별도로 기술할 예정(root-context.xml에 작성)
		-> root-context.xml (db등록은 서버 연동과 동시에 이루어져야하기 때문에
		서버연결과 동시에 읽혀지는 root-context.xml에 기술하는것임)
	 -->
	<mappers>
		<mapper resource="/mappers/member-mapper.xml"/>
		<mapper resource="/mappers/board-mapper.xml"/>
		<mapper resource="/mappers/reply-mapper.xml"/>
		<mapper resource="/mappers/chatting-mapper.xml"/>
	</mappers>

</configuration>


MyBatis 내장 별칭

댓글남기기