본문 바로가기
DataBase/개념

[SQL Mapper/iBatis] iBatis 문법정리 / Oracle 쿼리정리

by 깐니 2020. 10. 12.

iBatis 참고할 만한 내용들

iBatis는 더이상 개발이 중지된 상태이며, Apache project에서 google code로 넘어가면서 MyBatis 로 이름이 바뀌었다.

MyBatis, iBatis는 ORM이 아닌, SQL Mapper이다.
ORM은 객체를 매핑하는 것이고, SQL Mapper는 쿼리를 매핑한다.

실제 프로그램이 구동되면,

1. SqlMapConfig.java에서 내부적으로 데이터베이스와 Connection을 맺고, Statement객체를 생성한 후, 해당리소스 (SqlMapClient)를 반환한다.
2. 반환된 리소스로 SqlMap.xml에 정의된 Statement (method)를 호출한다.

iBatis의 핵심은 SqlMapConfig에 있다.
데이터베이스 연동을 위해 JDBC driver를 로드하고, connection을 맺고, Statement객체를 통해 Sql문을 실행하고, 결과를 받는 것이 모두 SqlMapConfig에서 이루어진다.
(*Statement 객체:
JDBC를 이용해서 SQL문을 발행하기 위해서 필요한 객체. Statement객체는 connection의 createStatement()를 호출해서 얻는다.)

iBatis란?

JDBC 프로그래밍 참고 블로그 -> Statement 객체, Resultset 객체 등 설명

 

 

iBatis 환경 설정

  • ORM(Object Relational Mapping)

    • 데이터베이스의 레코드를 직접 Java Class에 매핑하고 XML 형태의 SQL 문을 실행하는 Persistence Layer를 담당하는 Framework 개발 모델
  • /WEB-INF/classes/sqlMapConfig.xml : DB 정보와 mapper file 정보 등의 환경 설정 파일
  • mapper file (~Map.xml) : 실제 SQL문을 작성하는 XML 파일

iBatis 환경 설정 참고 블로그

mapper file (~Map.xml) : 실제 SQL문을 작성하는 XML 파일

📕 iBatis라이브러리를 이용한 VO, DAO 구현 참고 블로그

 

쿼리 정리

1. SELECT
desc board; 
board테이블에 어떤 컬럼이 있는지 조회

select count(*) "num" from board
where email="sge";
board 테이블에서 email이 sge인 컬럼의 총합, num으로 별칭을 줌.

select num ||' '|| name "num&name" from blog_member;
blog_member 테이블에서 num컬럼과 name컬럼을 합친 결과를 보여줌.
조회할 결과값 사이에 공백을 주기 위해 ||' '||을 사용함, num&name으로 별칭을 줌.

select num + 20000 "plus 20000" from blog_member;
num 컬럼값에 +20000을 한 결과가 나옴.

slelect num, name, email from blog_member
where num between 1 and 40;
num 컬럼값이 1 이상 40인 값의 컬럼의 num, name, email이 출력됨.
> between연산자
   - 작은 값을 앞에, 큰 값을 뒤에
   - 두 값을 모두 포함하는 결과 출력
   - 속도가 많이 느린 연산자이기 때문에 비교연산자(>,<,>=,>=)를 사용하는 것이 좋음.

select * from blog_member
where email in('sge', 'sge7102');
email 이 'sge', 'sge7102' 인 컬럼 전체 출력됨.
in 연산자는 속도가 빠르다!

select * from blog_member
where email like '%naver.com';
> %기호는 글자수 제한이 없음.

select * from blog_member
where email like '%_naver.com';
> _기호는 한 글자만 올 수 있음.

select * from blog_member
where gender is null;
gender가 null인 값이 조회됨, is not null을 쓰면 null이 아닌 값이 조회됨.

select name, gender from blog_member
where gender is not null and num = 41;
gender가 null이 아니고, num = 41 인 컬럼의 name, gender가 출력됨.
> or을 쓰면 둘 중 하나일 경우 해당되는 값이 출력됨.

select name, gender from blog_member
where gender is not null 
order by num desc;
gender값이 null이 아닌 값을 num기준으로 정렬하여 name, gender값을 출력함.
> desc : 내림차순, asc (default값) : 오름차순
> order by는 속도가 느린 작업이므로, 실전에서는 정렬도 하면서, 속도도 빠른 인덱스를 사용함.

select num, name from blog_member
where gender is not null
union
select num, name
from blog_member
where gender = 1;
두개의 select 결과 값을 모두 보여줌.
> union은 우선 첫 번째 컬럼으로 먼저 정렬한 후, 동일한 값이 있을 경우, 두 번째 컬럼으로 한번 더 정렬을 함.

select num, name from blog_member
where gender is not null
union all 
select num, name
from blog_member
where gender = 1;
union 과 다르게 정렬되지도 않고, 중복된 데이터도 그대로 출력함.

select num, name from blog_member
where gender is not null
intersect
select num, name from blog_member
where gender = 1;
> 두 sql 문장의 실행 결과에서 공통으로 있는 교집합 부분을 찾아내는 집합 연산자로, 정렬을 동반하므로 속도가 느림.

select num, name from blog_member
where gender is not null
minus
select num, name from blog_member
where gender = 1;
gender 이 not null인 값 중, gender = 1 인 값을 제외한 나머지 결과를 출력함.
> 두 개 쿼리의 컬럼의 갯수가 다르거나 데이터 형이 다를 경우, 에러 발생.

 

'2. INSERT

insert into table명( column1, colunm2.,,, ) values ( 값1, 값2 ,...);

 

3. UPDATE

update table명
set column1 = 값1, column2= 값2, ...
where 조건;

 

4. DELETE

delete from table명 where 조건;