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 내장 별칭
댓글남기기