성장 일기/쌍용교육센터 / / 2023. 5. 25. 10:32

0519/<resultMap>, 동적 쿼리

쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 https://github.com/2jaehoon/mybatisTest에 올려두었습니다.

 

<resultMap>

  - 조회컬럼과 Domain의 setter method를 개발자가 미리 Mapping 하는 것
  - 조회컬럼과 setter method의 이름이 같지 않아도 값을 넣을 수 있다.

<resultMap id="아이디" type="">
<result column="컬럼명" property="setter명" jdbcType="오라클의데이터형" javaType="자바의데이터형"/>
	. 
	. 
<!-- clob데이터형-->
<result column="컬럼명" property="setter명" jdbcType="clob" javaType="java.lang.String"/>
</resultMap>

 

  - 주의사항은 resultType에 사용하면 error 발생

<select id="" resultMap="resultMap 아이디" parameterType="">


* 조회결과를 저장하는 resultType과 resultMap는 하나만 사용할 수 있다.

  - resultType="Domain, 단일형"

  - resultMap="resultMap아이디"

 

동적 쿼리

  - OGNL( Object Graph Navigation Language ) : 태그를 사용하면 태그에 맞는

    언어의 문법을 찾아서 실행하는 언어

  - if, choose, foreach 등을 지원
  - select문 where을 동적으로 생성

  - <where> : where절이 필요할 때에 정의된다.

 

 * 비교 <if>

<if test=" getter 또는 입력 값  연산자 비교할 값">
조건에 맞을 때 수행할 문장
</if>

  - 사원명이 null이 아니면 해당 사원을 조회하고, 그렇지 않으면 모든 사원 조회

 
* <choose>

  - 여러 조건을 비교할 때

<choose>
<when test="조건식">
조건에 맞을 때 수행될 쿼리문
</when>
    .
    .
<otherwise>
모든 조건이 맞지 않을 때 수행 될 쿼리문 
</otherwise>
</choose>

 

* <foreach>

  - 값을 반복 해서 쿼리를 만들 때 ( in )
  - 값은  List, 배열에 들어가고 Map을 통해서 MyBatis Framework로 전달된다.
  - open이 한번 나오고 item과 seperator가 반복 출력 된 후 close가 나온 후 반복 종료

<foreach collection="map key" index="index" open="시작기호" item="변수명"
separator="구분자" close="끝기호">
#{ item }
</foreach>

 - 입력된 부서번호(하나)와 직무(여러 개)에 해당하는 사원 조회
1. Map 생성

 Map<String,Object> map=new HashMap<String,Object>();
 
 List<String> list=new ArrayList<String>);
 list.add("SALESMAN");
 list.add("MANAGER");
 list.add("CLERK");

 map.put("deptno", 10);
 map.put("job_list", list);

 

2. Handler에 Map 전달

List<EmpDomain> list= ss.selectList("아이디", map);

 

3. MyBatis Framework에서 Parsing

<select id="아이디" resultType="EmpDomain" parameterType="java.util.HashMap">
select 컬럼명,...
from  테이블명
<where>
deptno=#{ deptno } and
<foreach collection="job_list" item="job" index="i" separator="," open="(" close=")">
#{ job }
</foreach>
</where>
</select>



 

'성장 일기 > 쌍용교육센터' 카테고리의 다른 글

마지막 정리  (0) 2023.06.06
0518/ <typeAlias>, 쿼리문 태그(<, >) 처리  (0) 2023.05.25
0517/MyBatis에서 CRUD 사용  (0) 2023.05.25
0516/MyBatis 설정, properties  (0) 2023.05.17
0515/DI, 의존성 주입 종류  (0) 2023.05.15
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유