04. Mybatis SQL 활용

CHOISUJIN·2023년 4월 25일
0
post-thumbnail

🌟 mapper 파일 생성 시 반드시 해야하는 것!

  1. cache-ref 태그 삭제
  2. mapper 태그에 namespace 속성 추가 -> 해당 파일을 쉽게 부르기 위해!(DAO에서 사용)
<mapper namespace="지정할 이름"></mapper>

🌟 수행하려는 SQL에 따라서 태그가 구분됨!

  • id 속성은 필수!
  • parameterType = 매개변수(전달하는 값) 타입
  • resultType = 조회되는(전달되는) 값의 타입
  • resultMap -> resultType에 vo를 작성하는 경우
<select></select>
<insert></insert>
<update></update>
<delete></delete>
반환값이 있는 쿼리 반환값이 없는 쿼리
JDBC 방식 stmt | pstmt.executeUpdate(); stmt | pstmt.executeQuery();
Mybatis 방식 sqlSession.insert(), sqlSession.update(), sqlSession.delete() sqlSession.selectOne(), sqlSession.selectList()

🌟 매개변수가 있는 경우!!

  • DAO에서 값 전달
  • 반드시 parameterType으로 자료형 설정해줘야 함!
  • 매개변수는 #{}
    - #{변수명} : SQL에 값이 포함될 때 양쪽에 '' 추가됨 (pstmt) -> 리터럴 사용 (값 자체로 사용)
    - ${변수명} : SQL에 값이 포함될 때 양쪽에 '' 추가되지 않음(stmt) -> SQL 구문 조합 시 사용 (condition) / Number 타입

DAO

// 1행 조회(파라미터 O) 방법
String memberNickname = sqlSession.selectOne("memberMapper.test2", inputMember.getMemberEmail());
logger.debug(memberNickname + "");

member-mapper.xml

	<!-- 조회되는 행의 개수 : 1행 / 파라미터 타입 : String / 조회되는 데이터 타입 : String -->
	<select id="test2" parameterType="string" resultType="string">
		SELECT MEMBER_NICK FROM MEMBER 
		WHERE MEMBER_EMAIL = #{memberEmail} 
		AND SECESSION_FL = 'N'
	</select>

🌟 mapper의 속성은 Mybatis 타입으로 작성해줘야 함!


🌟 파라미터로 VO가 전달된 경우

1) 패키지명 + 클래스명을 모두 작성해야 한다.
2) mapper에서 VO에 저장된 값을 얻어와 사용할 경우 #{필드명}을 사용한다.
단, VO에 반드시 Getter가 작성되어 있어야 한다.

<select id="test3" parameterType="edu.kh.comm.member.model.vo.Member" resultType="string"> 
</select>

하지만, mybatis-config.xml -> typeAlias 지정하면

<!-- 별칭 작성 부분 -->
<!-- VO클래스의 패키지명 + 클래스명 모두 작성하는 것이 불편하기 때문에 짧은 별칭 부여 -->
<typeAliases>
	<typeAlias type="edu.kh.comm.member.model.vo.Member" alias="member"/>
</typeAliases>
<select id="test3" parameterType="member" resultType="string"> 
</select>

이렇게 짧게 작성할 수 있다!


🌟 resultMap -> resultType에 vo를 작성하는 경우

  • Mapper 최상단에 작성!!
  • SELECT 조회 결과(ResultSet)의 컬럼과 조회 결과를 옮겨 담을 VO의 필드명이 일치하지 않을 때 이를 매핑시켜 조회결과가 필드에 세팅되게 하는 역할

[resultMap 속성]
1) type : 조회 결과를 담을 vo의 타입 또는 별칭
2) id : 만들어진 resultMap 태그를 지칭할 이름(식별명)

[resultMap 내부 작성 태그]
<id> : PK 역할의 컬럼 - 필드 연결
<result> : PK를 제외한 나머지 컬럼 - 필드 연결

<resultMap type="member" id="member_rm">
  <id property="memberNo" column="MEMBER_NO"/>

  <result property="memberEmail" column="MEMBER_EMAIL"/>
  <result property="memberPw" column="MEMBER_PW"/>
  <result property="memberNickname" column="MEMBER_NICK"/>
  <result property="memberTel" column="MEMBER_TEL"/>
  <result property="memberAddress" column="MEMBER_ADDR"/>
  <result property="profileImage" column="PROFILE_IMG"/>
  <result property="enrollDate" column="ENROLL_DT"/>
  <result property="secessionFlag" column="SECESSION_FL"/>
</resultMap>
<select id="login" parameterType="member" resultMap="member_rm">
  SELECT MEMBER_NO,MEMBER_EMAIL,MEMBER_NICK ,MEMBER_TEL, 
  MEMBER_ADDR, PROFILE_IMG, 
  TO_CHAR( ENROLL_DT, 'YYYY-MM-DD HH24:MI:SS') AS ENROLL_DT, MEMBER_PW
  FROM MEMBER_S 
  WHERE SECESSION_FL = 'N' 
  AND MEMBER_EMAIL = #{memberEmail} 
	</select>
profile
매일매일 머리 터지는 중 ᕙ(•̀‸•́‶)ᕗ

0개의 댓글