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문의 결과를 저장할 프로퍼티를 지정 디 폴트는 셋팅하지 않음 여러 개의 컬럼을 사용한다면 프로퍼 티명에 콤마를 구분자로 나열할 수 있음 |
'프로그래밍 > Mybatis' 카테고리의 다른 글
Cause: java.sql.SQLException: Invalid parameter object type. Expected 'java.lang.String' but found 'java.util.LinkedHashMap'.; (0) | 2021.08.24 |
---|---|
09.28(Mybatis 활용) (0) | 2020.09.28 |
09.24(Mybatis-config 설정) (0) | 2020.09.24 |
09.23(Mybatis) (0) | 2020.09.23 |
09.22(Framework) (0) | 2020.09.22 |