Published 2020. 9. 25. 20:39
728x90
반응형

Mapper 설정

 

mapper.xml 생성 위치

쿼리 실행이 필요한 model의 위치에 mapper 폴더를 생성하고 식별하기 쉬운 이름을 지어 mapper.xml 파일을 등록

 

 

mapper.xml 작성

mapper.xml은 사용하고자 하는 쿼리나 결과로 받을 객체를 선언할 수 있음

<!-- mapper.xml 예시 -->
<?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">
  <resultMap id="resultMember" type="Member">
    <id property="id" column="ID" />
    <result property="passwd" column="PASSWD" />
  </resultMap>

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

 

 

mapper.xml 작성

먼저 xml 파일 최상단에 다음과 같이 xml 형식을 지정하여 이하의 설정내용은 mybatis mapper 설정임을 선언

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

이어서 태그를 작성하고, 외부에서 접근할 수 있는 이름인 namespace 속성을 기입한다. 이제 이 후 작성될 태그들은 태그 안에 기록

<mapper namespace="Member">
. . .
</mapper>

 

 

<resultMap> 태그 

조회한 결과를 객체와 Row간의 1:1 매칭이 아닌, 원하는 객체의 필드에 담아 반환하고자 할 때 사용

<!-- <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> 태그 예시 -->
<select id="memberInfo" parameterType="string“ resultType="_int">
  SELECT * FROM MEMBER WHERE ID = #{userid}
  <!-- #{field}는 pstmt의 ?의 역할이며, 전달된 값을 뜻함.
  또한 쿼리의 마지막을 알리는 세미콜론을 찍지 않음 -->
</select>

 

 

<select> 태그 주요 속성

resultMap과 resultType은 둘 모두를 사용할 수 없으며, 둘 중 하나만 선언해야 함

속성명 내용
id 구문을 찾기 위해 사용될 수 있는 네임스페이스내 유일한 구분자
parameterType 구문에 전달될 파라미터의 클래스명(패키지 경로 포함)이나 별칭
resultType 리턴되는 타입의 패키지 경로를 포함한 전체 클래스명이나 별칭
collection인 경우 list, arraylist로 설정할 수 있음
resultMap 사용할 resultMap의 id를 기술
flushCache 이 값을 true 로 설정하면 구문이 호출될 때마다 로컬, 2nd 레벨 캐시 가 지워짐(flush)
기본값은 false
useCache 이 값을 true 로 설정하면 구문의 결과가 2nd 레벨 캐시에 저장. 기본값은 true이
timeout 예외가 발생하기 전에 데이터베이스의 요청 결과를 기다리는 최대시 간을 설정
드라이버에 따라 다소 지원되지 않을 수 있음
statementType STATEMENT, PREPARED 또는 CALLABLE 중 하나를 선택할 수 있음
마이바티스에게 Statement, PreparedStatement 또는 CallableStatem ent를 사용하게 함
기본값은 PREPARED

 

 

 

FlushCache? useCache?

<insert>, <update>, <delete> 태그

<!-- <insert> 태그 예시 -->
<insert id="insertMember" parameterType="Member" flushCache="true"
statementType="PREPARED" keyProperty="" keyColumn="" useGeneratedKeys="true" timeout="20">
  INSERT INTO MEMBER VALUES(
    #{id}, #{passwd}, #{name},
    #{email}, #{gender}, #{age},
    #{phone}, #{address}, DEFAULT
  )
</insert>
<!- <update> 태그 예시 -->
<update id="updateMember" parameterType="Member"
flushCache="true" statementType="PREPARED" timeout="20">
  UPDATE MEMBER
  SET PASSWD = #{passwd}, EMAIL = #{email}, AGE = #{age},
  PHONE = #{phone}, ADDRESS = #{address}
  WHERE ID = #{id}
</update>
<!-- <delete> 태그 예시 -->
<delete id="deleteMember" parameterType="string"
flushCache="true" statementType="PREPARED" timeout="20">
	DELETE FROM MEMBER WHERE ID = #{userid}
</delete>

 

 

<insert>, <update>, <delete> 태그 주요 속성

id 구문을 찾기 위해 사용될 수 있는 네임스페이스내 유일한 구분자
parameterType 구문에 전달될 파라미터의 클래스명(패키지 경로 포함)이나 별칭
flushCache 이 값을 true 로 셋팅하면 구문이 호출될때마다 캐시가 지워짐(flush)
디폴트는 false
timeout 예외가 발생하기 전에 데이터베이스의 요청 결과를 기다리는 최대시간을 설정
드라이버에 따라 다소 지원되지 않을 수 있음
useGeneratedKeys (insert, update 에만 적용) 데이터베이스에서 내부적으로 생성한 키 (예를 들어 MySQL또는 SQL Server의 자동 증가 필드)를 받는 JDBC getGeneratedKeys 메소드를 사용하도록 설정
기본값은 false
keyProperty (insert, update 에만 적용) getGeneratedKeys 메소드나 insert 구문의 selectKey태그의 설정 select문의 결과를 저장할 프로퍼티를 지정
디 폴트는 셋팅하지 않음
여러 개의 컬럼을 사용한다면 프로퍼 티명에 콤마를 구분자로 나열할 수 있음

 

반응형
복사했습니다!