Notice
Recent Posts
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

IT'S YU

[MyBatis] sqlMapper - 실제 쿼리문(CRUD)를 작성할 xml문서의 문법 본문

DB/MyBatis

[MyBatis] sqlMapper - 실제 쿼리문(CRUD)를 작성할 xml문서의 문법

자석 2022. 2. 10. 11:42

* 실제 쿼리문(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 태그 안에서만 사용가능함.

 

 

 

출처 : https://m.blog.naver.com/hoyeon0/50137830468

'DB > MyBatis' 카테고리의 다른 글

[MyBatis] 설정 파일 - SQL Mapper 작성 방법  (0) 2022.02.23
[MyBatis] Mapper XML 파일 설정  (0) 2022.02.22
[MyBatis] XML 기초문법  (0) 2022.02.10