[Mybatis] mybatis, 마이바티스 정리

HodooHa·2024년 5월 29일

mybatis란?

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

mybatis의 흐름


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

mybatis 동작 구조

mybatis-config 설정

mybatis-config.xml 작성

  1. 먼저 xml파일 최상단에 하기와 같이 xml형식을 지정하여 이하의 설정 내용이 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">
  1. < configuration > 최상위 태그를 작성하고 내부에 필요한 설정들을 작성한다.
<configuration>
...
</configuration>

< properties > 태그 : 외부 java property파일의 내용을 불러올 때 사용

<properties resource=“경로+파일명.properties”>
<!--properties파일에값설정가능-->
<property name=“key명” value=“설정값”>
</properties>

< properties > 설정값활용

<dataSource>
<property name=“명칭” value=“${properties에 설정된key명}” />
<property name=“명칭” value=“${properties에 설정된key명}” />
</dataSource>

< settings > 태그 : mybatis 구동시 선언할 설정들을 작성

<settings>
<!-- Null 값이발생할경우빈칸이아닌null로인식하라 -->
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>

< typeAliases > 태그 : mybatis에서 사용할 자료형의 별칭을 선언

<typeAliases>
<!-- type에는 패키지명까지전부기술해주어야한다. -->
<typeAlias type="member.model.vo.Member" alias="Member" />
</typeAliases>

< mappers > 태그 : 사용하고자 하는 쿼리가 정의된 mapper 파일 등록

<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>

mapper 설정

mapper.xml 작성

  1. 먼저xml 파일 최상단에 다음과 같이 xml 형식을 지정하여 이하의 설정 내용이 mybatis 설정임을 선언한다.
<?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">
  1. 이어서 < mapper > 태그를 작성하고, 외부에서 접근할 수 있는 이름인 namespace속성을 기입한다. 이제 이후 작성될 태그들은 < mapper > 태그 안에 기록하면 된다.
<mapper namespace="Member">
...
</mapper>

< resultMap > 태그 : 조회한 결과를 원하는 객체의 필드에 담아 반환

<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를 지정하지 않은 경우, 패키지명부터 클래스명까지 모두 기술해야 한다.

< select > 태그 : SQL의 조회 구문 작성

해당 쿼리를 외부에서 접근하고자 할때 namespace.ID명을 적어 접근이 가능하다.

<select id="memberInfo" parameterType="string“ resultType="_int">
SELECT * FROM MEMBER WHERE ID = #{userid}
</select>

태그 주요 속성

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

profile
성장하는 개발자, 하지은입니다.

0개의 댓글