마이바티스 프레임워크
- SQL 실행 결과를 자바 빈즈 또는 Map 객체에 매핑해주는 Persisitence 솔루션으로 관리한다. 즉, SQL을 XML로 분리한다.
- SQL문과 프로그래밍 코드를 분리해 구현한다.
- 데이터소스 기능과 트랜잭션 처리 기능을 제공한다.
마이바티스 다운로드 주소! : https://blog.mybatis.org/
The MyBatis Blog
A blog about the the MyBatis data mapper framework.
blog.mybatis.org
CRUD 실습
-SqlMapConfig.xml : 반환 값 저장하는 빈, 트랜잭션, 데이터소스 등 마이바티스 관련 정보 설정
-member.xml : 회원 정보 관련 SQL문 설정
설정 파일들은 src 패키지 아래에 위치해야 한다.
1. 조회
우선 sqlMapConfig.xml을 작성한다.
<typeAlias>는 SQL문으로 값을 전달하거나 반환되는 레코드를 저장하는 용도로 사용하기 위한 빈인 MemberVO 빈을 생성하며, 데이터소스 태그는 마이바티스가 연동하는 데이터베이스에 대한 소스를 설정한다. mappers태그로 SQL문이 있는 XML 파일의 위치를 지정한다.

HashMap을 이용하여 모든 회원 정보를 조회할 때는 레코드의 컬럼 이름이 key, 그 값이 value 쌍이 되는 해시맵 형식으로 저장해야 한다.
member.xml의 type 속성을 HashMap로 하면 해시맵 형태로 저장할 수 있다. 이때 사용한 id는 memResult이므로, memResult라는 해시맵에 회원 정보가 키, 값 쌍으로 들어있는 것이 된다.

조건 값으로 회원 정보를 조회해본다. 브라우저에서 전달되는 값이 있으므로, select 태그에 parameterType속성을 전달되는 조건 값의 데이터 타입인 String(id), int(pwd)를 지정한다.
전달되어져 온 조건값은 #{매개변수이름} 형식으로 사용한다. 조회되는 레코드가 하나일 경우는 memberVO 형식으로, 여러개일 경우는 resultMap을 사용한다.

서블릿을 작성한다. 검색 조건이 slelctMemberById라면 전송된 값을 getParam으로 가져와서, SQL문에 id를 전달하여 해당 id값을 조건으로 검색하도록 dao.selectMemberById(id)를 호출한다. 패스워드의 경우에는 패스워드를 전달하여 메서드를 호출한다.

DAO에 실행될 메서드를 작성한다. selectOne()메서드는 하나의 레코드를 조회할 때 사용되는, 마이바티스의 SqlSession 클래스의 메서드이다. 따라서 SqlSession 객체를 만들고, 레코드 한 개만 조회한 값을(id를 사용) VO에 저장한다. pwd도 마찬가지이나 비밀번호가 같은 회원은 여러명이 존재할 수 있으므로, 여러 레코드를 조회할 수 있는 selectList 메서드를 사용한다.

검색창을 만든다. 검색창에 입력한 값과 셀렉트 박스의 검색 조건을 선택하여 서블릿으로 전송한다.

조회한 회원 정보가 출력될 창을 만든다.

아이디를 선택하고, hong으로 조회한다. 이때 sql developer을 반드시 실행해놔야 이클립스가 접근할수 있단것을 잊지 않도록 하자..!


2. 회원정보 추가
member.xml을 수정한다. <insert>를 사용할 것이므로 해당 태그로 insertMember 를 작성한다. DAO에서 VO에 저장해 넘겨온 정보를 sql문 insert를 사용하여 values로 설정한다.

DAO에 insertMember 메소드를 추가한다. SqlSession을 만들고, insert문으로 실행할 sql문의 id(xml에서 설정한 id)와 받아온 추가될 회원 정보 vo를 함께 전달한다. 반드시 commit함을 잊으면 안된다!

회원 가입창에서 정보를 전송하면, action값으로 insertMember를 전달한다.

서블릿 캡쳐부분이 어디갔는지 사라졌는데 서블릿에도 구문을 추가해야 한다. 만약 브라우저에서 전송된 action값이 insertMember면 함께 전송된 회원 정보를 가져와서 VO객체에 설정하고, DAO의 insertMember()메서드를 호출하며 인자로 전달해야 한다.
회원정보를 추가해본다.


해시맵을 이용하여 회원 정보를 추가해본다. insertMember2라는 id를 가지는 sql문을 member.xml에 작성하는데, 이때 parameterType은 당연히 HashMap으로 지정해야 한다. 가끔 오류가 날 수 있으므로 java.util.HashMap으로 지정하는게 훨씬 안전한 것 같다..(나도 나중에 수정했음)

서블릿을 작성한다. 브라우저에서 전달된 회원 정보를 해시맵에 키/값 쌍으로 저장한 후,DAO의 메서드로 저장한 db를 전달한다. db를 전달받은 DAO는 해시맵을 다시 sql문으로 전달할 것이다.


회원정보를 추가해본다.


3. 수정
xml에 update문을 추가할 것이다. parameterType은 VO로, id는 updateMember로 설정한다. 이때, 누구를 수정할 지는 where 조건절에 id로 받아올 것이다.

서블릿을 수정한다. 수정창에서 전달받은 회원 정보를 VO에 설정한 후, dao에 실어 보내면 dao에서 sql문으로 전달해 줄 것이다.

이러케!
commit()을 하지 않으면 영원히 반영되지 않는다.
구글검색을 하다가 허망해질 수 있으니 주의하도록 하자..

modMember.jsp, 즉 수정하는 창을 작성한다. 수정 정보를 action을 이용해 updateMember로 전송할 것이다.

수정해본다. hong의 아이디를 가진 사람의 이름과 이메일을 수정하였다.


4. 삭제
xml에 delete문을 추가한다. 이때 parameterType은 String이다. 이 파라미터 타입은 sql문이 받아오는 값의 타입임을 잊지 말자. 즉, id가 string 타입인것이다.

서블릿에 action이 deleteMember일 경우 dao의 deleteMember() 메서드를 불러오는 구문을 추가한다.

DAO를 작성한다. id값을 토대로 xml에 등록된 deleteMember을 실행시켜 해당 데이터를 삭제할 것이다.

멤버 조회창에 삭제하기 버튼을 만든다.

삭제 실행


마이바티스는 동적 SQL문 기능을 제공한다. 공통 SQL문에 대해 조건 값의 유무에 따라 동적으로 공통 SQL문에 조건절을 추가하는 것이다. 주로 where절을 동적으로 추가하며, if, choose(when, otherwise), trim(where, set), foreach 가 있다.
* 이해하기 위해 정리 : 웹 -> 검색할 정보 전달 -> 서블릿이 받아서 DAO 함수 호출 -> DAO에서 xml의 SQL문 호출하여 결과값 받아서 서블릿으로 반환 -> 서블릿이 웹으로 포워딩 *
'JAVA SPRING' 카테고리의 다른 글
| 스프링-마이바티스 연동, 애너테이션 (0) | 2021.08.05 |
|---|---|
| MVC (0) | 2021.07.30 |
| HTML5 와 제이쿼리 (0) | 2021.07.28 |
| JSTL (0) | 2021.07.27 |
| JSP 스크립트, 액션 태그 (0) | 2021.07.27 |