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

이전에 JDBC Templete을 통해 SQL을 실행했다면 Mybatis는 해당 흐름을 전용 라이브러리를 통해 대체하여 동작한다.

<?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>
<properties resource=“경로+파일명.properties”>
<!--properties파일에값설정가능-->
<property name=“key명” value=“설정값”>
</properties>
<dataSource>
<property name=“명칭” value=“${properties에 설정된key명}” />
<property name=“명칭” value=“${properties에 설정된key명}” />
</dataSource>
<settings>
<!-- Null 값이발생할경우빈칸이아닌null로인식하라 -->
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
<typeAliases>
<!-- type에는 패키지명까지전부기술해주어야한다. -->
<typeAlias type="member.model.vo.Member" alias="Member" />
</typeAliases>
<mappers>
<mapper resource="member/model/mapper/member-mapper.xml" />
<mapper resource=“notice/model/mapper/notice-mapper.xml" />
<mapper resource=“board/model/mapper/board-mapper.xml" /> </mappers>
<?xml version="1.0" encoding="UTF-8"?>
<!-- XML 문서의 유효성 체크를 위해 필요 -->
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<!-- 마이바티스 설정과 관련하여 기본셋팅들을 선언할수 있는 영역 -->
<configuration>
<!-- null 데이터가 전달되었다면 빈칸이아닌 null 로 인식하라는 뜻 , 주의 : value에 null 은 반드시 대문자로
!! -->
<settings>
<setting name="jdbcTypeForNull" value="NULL" />
</settings>
<typeAliases>
<typeAlias type="com.multi.shop.board.model.dto.BoardDTO"
alias="Board" />
<typeAlias type="com.multi.shop.member.model.dto.MemberDTO"
alias="Member" />
<typeAlias type="com.multi.shop.product.model.dto.ProductDTO"
alias="Product" />
<typeAlias type="com.multi.shop.product.model.dto.SearchCriteria"
alias="SearchCriteria" />
</typeAliases>
<!-- DB연결할 설정에 대한 정보를 선언하는 영역 default : 연결설정을 여러 개 생성할수 있고 아이디로 구분 하는데 기본으로
연결할 설정정보를 가리키는 속성 -->
<environments default="development">
<environment id="development">
<!-- 마이바티스의 핵심이 되는 설정은 트랜잭션을 제어하기 위한 TransactionManager와 함께 데이터 베이스 Connection
인스턴스를 가져오기 위한 DataSource를 포함 * TransactionManager는 JDBC와 MANAGED 둘 중 하나를
선택할 수 있음 - JDBC : JDBC가 commit과 rollback의 기증을 직접 사용 가능하게 하는 옵션(수동 commit)
트랜잭션의 스코프를 관리하기 위해 dataSource로 부터 커넥션을 가져온다. - MANAGED : 트랜잭션에 대해 어떠한 영향도
행사하지 않는다는 옵션(자동 commit) 컨테이너가 트랜잭션의 모든 생명주기를 관리한다. 디폴트로 커넥션을 닫아줌 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED"> <!-- 한번 등록 해놓으면 캐쉬로 등록해서 다음번에도 계속 적용 -->
<!-- <property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/scott" /> -->
<property name="driver" value="net.sf.log4jdbc.DriverSpy"/>
<property name="url" value="jdbc:log4jdbc:mysql://localhost:3306/scott"/>
<property name="username" value="scott" />
<property name="password" value="tiger" />
</dataSource>
</environment>
</environments>
<!--<transactionManager type="JDBC"/> <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> -->
<mappers>
<mapper resource="/mappers/board-mapper.xml" />
<mapper resource="/mappers/member-mapper.xml" />
<mapper resource="/mappers/product-mapper.xml" />
</mappers>
<?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="Member">
...
</mapper>
<resultMap id="resultMember" type="Member">
<!-- prop 는필드명, column 은DB 컬럼명-->
<id property="id" column="ID" />
<result property="passwd" column="PASSWD" />
. . .
</resultMap>
※ resultMap의 type 속성은 실제로 구현해놓은 자바 POJO 객체를 사용해야하며, Mybatis-config.xml에서typeAlias를 지정하지 않은 경우, 패키지명부터 클래스명까지 모두 기술해야 한다.
해당 쿼리를 외부에서 접근하고자 할때 namespace.ID명을 적어 접근이 가능하다.
<select id="memberInfo" parameterType="string“ resultType="_int">
SELECT * FROM MEMBER WHERE ID = #{userid}
</select>

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.