IT'S YU
[MyBatis] sqlMapper - 실제 쿼리문(CRUD)를 작성할 xml문서의 문법 본문
* 실제 쿼리문(CRUD)를 작성할 xml문서의 문법(sqlMapper)
1. select 태그
<select id="" parameterClass="" resultClass="" parameterMap="" resultMap="" >
쿼리문 작성
</select>
- parameterClass 속성
=> 인수로 값이 객체 형식으로 넘어와서 쿼리문에서 사용함.
사용할때는 #이름# , $이름$
- parameterMap 속성
=> 쿼리문은 PreparedStatement를 이용할 때(?) ?의 순서를 <parameterMap class="" id="">
</parameterMap> 태그통해 선언한 후 사용할 때 씀.
=> 미리 Map을 통해 순서를 구현 해 놓고 적용하는 방법.
- resultClass 속성
=> 쿼리문을 실행 한 후 결과 값을 객체형식으로 리턴함.
객체의 이름을 package 까지 선언함.
- resultMap 속성
=> 쿼리문을 실행 한 후 결과 값을 미리 선언된 <resultMap class="" id=""></resultMap> 태그
형식으로 리턴됨
=> 주로, DB컬럼명과 bean의 필드명이 불일치 할 때 사용함.
- id 속성
=> 태그의 이름은 선언하여 자바쪽에서 id 이름으로 호출함.
- select 태그를 자바에서 호출할때는
List list = .queryForList(인수, ...) ;
Object obj = .queryForObject(인수,...) ;
2 . insert , update, delete 태그
<insert id="" parameterClass="" parameterMap="">
insert 쿼리
</insert>
* insert 태그를 자바문서에서 호출할때 는
int re = .inrest(인수,...);
- 주의: 만약, insert한 후 성공/여부를 확인하고 싶을때 insert 메소드가 아닌 update메소들
호출한다.
<update id="" parameterClass="" parameterMap="">
update 쿼리
</update>
* update 태그를 자바문서에서 호출할때 는
int re = .update(인수,...);
re의 값이 0이면 실패, 1이상이면 성공
<delete id="" parameterClass="" parameterMap="">
delete문장
</delete>
* delete 태그를 자바문서에서 호출할때 는
int re = .delete(인수,...);
re의 값이 0이면 실패, 1이상이면 성공
3 . 자주사용하는 클래스 전체경로 별칭 지정하기
<typeAlias alias="user" type="gaon.ex0525.UserBean"/>
=> typeAlias를 선언하면 gaon.ex0525.UserBean를 사용할때
user라는 이름으로 사용 할수 있다.
4 . SQL쿼리문장에서 문자열 연결하기
=> || 기호를 사용한다.
ex)
SELECT * FROM MEMBER
WHERE addr LIKE '%' || #addr# || '%'
=> parameter로 들어오는 #addr# 의 값에 앞뒤로 % 붙인다.
5 . 동적으로(상황에 따라) 쿼리문 작성하기
<dynamic>태그를 이용하여 상황에 따라 <dynamic>태그 안에 있는 쿼리문을 실행하도록 함.
ex)
<dynamic>
<isNotEmpty property="id" prepend="where">
id=#id#
</isNotEmpty>
</dynamic>
* 만약 id값이 비어있지 않다면 where id=#id#를 실행한다 .
6 . $ 와 # 의 차이
=> parameter로 들어오는 값을 $name$ 또는 #name#으로 표현 할 수 있는데, 만약 name의 값이
jang 이라면 $name$은 jang #name#은 'jang'으로 매칭 된다.
=> 문자열(value)로 사용하고자 할 때는 #name# 컬럼명 또는 테이블이름으로 사용 할때는 $name$
7 . insert 메소드가 리턴하는 Object 타입의 쓰임새
=>CRUD를 작성하는 xml문서에서 <insert> 태그를 사용 할 때 <insert>태그안에 <selectKey>
태그를 사용하면 <selectKey> 태그의 결과 값이 insert메소드의 리턴값 Object에 저장된다.
=> <insert>태그안에 <selectKey> 태그가 없으면 null 리턴됨.
ex)
- insert 한 후 selectKey를 통해 시퀀스의 값 리턴 -
<insert id="insertSelectKey2" parameterClass="java.util.Map">
<selectKey keyProperty="no" resultClass="Integer">
select s_no.nextval from dual
</selectKey>
INSERT INTO selectKeyTest VALUES(#no#,#name#)
</insert>
* <selectKey 안에서 작성된 쿼리문 실행결과 값이 KeyProperty의 no 이름으로 저장되어
parameterClass로 전달된다. insert 할때 #no#를 이용하여 사용 할 수있음.
no 의 값이 insert 실행 결과 Object에 저장됨.
- insert 한 후 selectKey를 통해 name 리턴
<insert id="insertSelectKey3" parameterClass="java.util.Map">
<selectKey keyProperty="userName" resultClass="String">
SELECT name FROM selectKeyTest WHERE no=4
</selectKey>
INSERT INTO selectKeyTest VALUES(s_no.nextval ,#name#)
</insert>
* <selectKey 에서 사용한 쿼리문 결과 name의 값이 parameter에 저장되면 insert 한 후
결과 Object 로 리턴된다.
- insert 한 후 selectKey를 통해 SelectKeyBean 리턴
<insert id="insertSelectkey4" parameterClass="java.util.Map">
<selectKey keyProperty="bean" resultClass="selectkey">
Select * from selectKeyTest where no = 4
</selectKey>
INSERT INTO selectKeyTest VALUES(s_no.nextval ,#name#)
</insert>
* <selectKey>에서 사용한 쿼리문의 결과가 bean의 형태로 저장되어 parameter에 저장되고
결과를 리턴한다.
* <selectKey> 태그 사용 할 때 주의 사항
=><selectKey>의 결과값이 parameter로 저장되므로 <insert>태그의 속성 parameterClass를
모든 타입을 저장할 수 있는 java.util.Map을 사용하는 것이 좋음.
특히, <selectKey>의 실행문장이 select * from selectKeyTest where no = 2 인 경우는
* 컬럼을 bean에 저장하여 map에 넣을수 있도록 Map으로 선언함.
* <selectKey> 사용 용도
=> 주로, insert 할 때 시퀀스나 pk키를 사용하면 현재 insert된 레코드인 시퀀스 값이나 pk
를 가져오고자 할때 <selectKey>태그를 사용함.
=> <selectKey>는 insert 태그 안에서만 사용가능함.
'DB > MyBatis' 카테고리의 다른 글
[MyBatis] 설정 파일 - SQL Mapper 작성 방법 (0) | 2022.02.23 |
---|---|
[MyBatis] Mapper XML 파일 설정 (0) | 2022.02.22 |
[MyBatis] XML 기초문법 (0) | 2022.02.10 |