10/19

오늘은 삭제하는 쿼리 를 연동시키는 법을 배웠고 MyBatis의 Dynamic SQL 을 이용하여 if, trim, foreach를
활용하여 쿼리문을 작성하는 것을 배웠다.

 

# DELET 쿼리문을 이용한 삭제

파라미터를 controller에 서 잘 받아서 dao 로 전달 해주고 dao 에 들어간 값을 이용해 데이터를 삭제 

삭제할 id를 url의 파라미터에 입력하면 

잘 지워졌다고 콘솔로 보여주고

id 1번의 고객이 사라진 것을 볼 수 있다. 

(삭제 할 때에는 꼭 WHERE를 이용 해 삭제하자 잘못하면 테이블을 통째로 날려버릴 수도....)

 

 

# 조회 후 수정

파라미터 값을 받아 dao로 전달 후 조회 한 값을 model 에 저장 시키고 

model에 저장한 데이터를 받아와 다시 dao의 update로 넘기고 redirect 로 sub13 페이지 경로로 다시 이동시킨다.

dao 에서 하는 일은 우선 select8 에서는 전달받은 id 를 쿼리문에 집어 넣어 조회하고 MyDto33타입으로
controller 에 전달 한다.

그리고 update1 에서 하는 일은 controller 에서 getId 로 받아온 id 값을 기준으로 Update 명령어를
실행 하고 각각 컬럼에 맞는 위치에 dto필드명을 매칭 시켜 저장 시켜 준고 난후 int 타입으로 
리턴 해준다. 

 

dto 의 필드명은 조회 할때에 정해준 필드명에 맞게  name resolve를 해주어야 한다. 

 

이렇게 간단하게 기존에 배운 쿼리 문을 활용 하여 데이터를 생성하고 삭제하고 수정 하는것을 배웠다. 

하지만 순수하게 모든 데이터가 들어온다거나 여러개를 선택 할 때도 있기때문에 MyBatis 의 
Dynamic SQL 을 이용하여 if, trim, foreach 을 배워 보았다.

 

그리고 우리는 어노테이션을 이용한 mapper 클래스에 쿼리문에 <script> 태그를 감싸서 사용 하는 방법을 배웠다.

 

 

# Dynamic SQL ( IF )

한 DAO에 데이터가 들어가는 경우가 여러 경우 일때 dao의 쿼리 문에 if를 써주어야 한다.

동적 쿼리를 작성 할때에는 script 태그로 감싸주고 시작한다. 

우선 쿼리 문에 script 태그로 감싸준후 값이 변경 될 부분에 if 태그로 감싸준다 그리고 if 태그 내부에
test 를 써서 조건식을 써주고 if 태그로 감싼 부분 에 나머지 쿼리문을 작성 해주면 된다.

url 에 경로를 입력하면

1번 조건인 국가가 mexico인 고객의 숫자 5 가 잘 조회 된것을 볼 수 있고 

2번 조건인 null 이기 때문에 WHERE 절 쿼리 가 안나와 전체 고객의 수를 출력 하여 90이 나온
것을 볼 수 있다.

 

# Dynamic SQL 의 비교 연산자 (주의 하자)

MyBatis는 다른 엘리먼트의 사용을 최대한 제거하기 위해 OGNL 기반의 표현식을 가져왔다고 레퍼런스에 
쓰여 있다 OGNL 사이트에 들어가보면 

이렇게 정리 되어 있다.

 

# Dynamic SQL ( CDATA ) -> 문자만 판단, 마크업 코드로 해석 하지 않게 하는것
안에 어떻나 기호가 들어 있더라도 태그로 인식 하지 못하게 하는 명령어 

사용 방법 -> script 태그로 감싼 후 < ! [ CDATA [ '쿼리문 작성' ] ] > 

DAO 에서 쿼리 작성 후 

TEST 코드로 실행 해 보면 

우리 가 원한대로 쿼리문이 작성된 것을 볼 수 있다.

 

# Dynamic SQL ( FOREACH )  [SEPERATOR, OPEN, CLOSE] 반복문

foreach 태그 는 반복 시켜주는 일을 한다 위의 코드를 풀이 해보면  collection에는 받아올 데이터명을 넣어주고

item 은 받은 데이터의 값들을 하나씩 나열 하는 변수  sparator 는 들어간 데이터 사이사이 어떤것을 넣을 지 지정

openforeach 시작때 들어갈 것 close 는 foreach가 끝날때 들어갈 것 을 지정 해준다.

TEST 코드로 실행 해보면 

보는것과 같이 쿼리가 작성 되고 받은 바라미터 수만큼 ? 가 생성 된것을 볼 수 있다. 

 

 

 

# Dynamic SQL ( TRIM )  [ WHERE, SET ] 잘라내기, 붙여너기

TRIM은 필요에따라 붙을수도 잘라낼수도 있게 해주는 기능 입니다.

trim은 foreach와 자주 쓰이는것 같다 

  • prefix -> 입력되는 파라미터 값이 있으면 들어가 있는것("WHERE")을 작성하란 기능
  • prefixOverides -> 내부의 컨텐츠의 시작 글자가 들어가있는 것으로 시작("OR") 하면 지우라는 기능 

테스트 코드로 받아오는 파라미터를 작성해주면 

조건 대로 제일 앞에 WHERE 가 들어가고 foreach 로 반복 시작하던 제일 앞 OR 가 지워진 것을 볼 수 있다 

 

테스트 코드로 아무것도 없는 것을 입력 받는 다면 

trim으로 WHERE가 사라지고 받아오는 파라미터가  없기 때문에 뒤에 더이상의 쿼리 가 없는것을 볼 수 있다.

 

 

# Dynamic SQL ( BIND )  자기가 반아온 값을 합쳐서 자신이 활용하기

bind태그 는 파라미터로 받은 값을 

value에서 파라미터로 받은 값을 원하는 대로 조합하여 

name의 변수로 저장 하고 

원하는 곳에 활용 하는 기능 이다.

테스트 코드로 실행 해보면 

우리가 작성한 쿼리 문으로 파라미터가 잘 들어가 있는것을 볼 수 있다.

 

※ 오늘 배운것은 여기까지 였다 쿼리문 작성 시 오타를 오류로 잡아주지 못하고 MyBatis의 동적 쿼리태그 들을
에러로 인식 해서 좀 많이 거슬렸다 . 오늘 까지 배운것으로  간단한 웹 사이트와 디비를 구성 해 볼 수 있을 꺼 같지만

여러모로 어려웠던 것 같다 더 열심히 해보도록 하자 ....

+ Recent posts