1. 라이브러리 설치
https://github.com/mybatis/mybatis-3/releases
Releases · mybatis/mybatis-3
MyBatis SQL mapper framework for Java. Contribute to mybatis/mybatis-3 development by creating an account on GitHub.
github.com
zip파일을 다운받아 압축을 풀고 mybatis-3.5.11.jar 파일을 WEB-INF > lib 폴더에 넣는다.
2. 플러그인 설치
Eclipse > Help > Eclipse Marketplace > MyBatipse 검색 후 설치.
설치 후 이클립스를 재시작한다.
필수는 아니지만 설치해야 편의성이 좋아진다.
3. Factory 클래스 작성
config.xml의 경로를 작성하지 않으면 기본적으로 WEB-INF > classes 폴더에서 찾는다.
4. DB 연결 환경설정
config.xml 작성.
driver에 사용할 DB의 드라이버명을 적는다. 여기선 MySQL을 사용했다.
url에 DB명을 적는다.
username과 password를 적는다.
여러개의 DB를 사용하려면 config 파일을 여러개 만든다. (url에서 mydb부분을 바꿔서 작성)
mappers 안에는 사용할 mapper.xml을 추가한다.
5. CRUD 작성
mapper.xml 작성.
다른곳에서 접근할 때 namespace.id로 접근하기 때문에 namespace와 id는 반드시 작성한다.
select, insert, update, delete 등이 있다.
공백에서 Ctrl+space를 누르면 사용 가능한 태그들이 나온다.
parameterType은 IN mode 타입, resultType은 OUT mode 타입이다.
_parameter는 MySQL의 고유한 내부변수인데 parameterType이 기본형일 경우 사용한다.
내부변수 종류 : _parameter, list, array
변수명을 다르게 적어도 되지만 나중에 이게 무슨 변수인지 헷갈릴 수 있기에 _parameter로 명시하는 게 좋다.
(예를 들어 id=#{id}에서 id가 vo객체의 id인지 String으로 입력받은 인수인지 헷갈릴 수 있다.)
resultType대신 resultMap을 사용 할 수 있다.
주로 DB의 컬럼명과 VO객체의 필드명이 다를 경우 사용한다.
그 외에도 VO클래스의 코드 정리, 반환값이 List에 담길 때 의미가 좀 더 명확해짐, 테이블간의 관계가 1:n일 때
원하는 컬럼(쉽게 말해 중복된 컬럼들 중 원하는 컬럼)을 지정할 수 있는 등의 장점이 있다.
쿼리문의 마지막에 ;을 적지 않는다.
파라미터 형식 : #{변수명}, ${변수명}이 있다.
#{변수명}은 변수값 양 옆에 따옴표를 추가한다. #{name} => 'hong'
${변수명}은 변수값 그대로다. ${name} => hong
숫자가 아닌 경우 쿼리문에서는 따옴표가 필요한데,
이걸 악용하는 해커가 SQL공격을 할 수 있으니 #{변수명}을 사용하는 게 좋다.
insert의 경우 MemberVo 타입으로 변수를 받는데 이때 #{id}는 vo.getId()를 뜻한다.
(vo는 MemberVo 타입으로 만들어진 객체)
6. 간단한 사용 예제
Factory 클래스를 사용해 SqlSession 객체 생성.
factory는 static field이고 getter도 static method이기 때문에 새로운 객체를 생성하지 않고 클래스를 통해 접근해야 좋다.
factory를 static field로 사용한 이유는 static이 아닐 경우 접근 할 때 객체를 만들어야 하기 때문이다.
그렇게 객체를 여러번 만들다보면 객체마다 field를 가지고 있게 되어 비효율적이기 때문에
공통적으로 사용할 field는 static으로 선언하면 좋다.
하지만 이때 주의할 건 static field를 너무 많이 사용하면 나중에 디버깅할 때,
어디서 버그가 생겼는지 찾기 어려운 경우가 생기니 꼭 필요한 경우들에만 사용하는 게 좋다.
CRUD 실행을 위해 namepace.id유형으로 mapper에 접근한다.
select의 결과 row가 1개를 넘으면 selectList를 사용하고 row가 1개면 selectOne을 사용한다.
insert, update, delete인 경우 commit 또는 rollback을 고려한다.
SqlSession 객체를 모두 사용하고나면 close해서 리소스를 반환해준다.
'웹개발' 카테고리의 다른 글
Eclipse Spring 플러그인 설치 (0) | 2022.12.07 |
---|---|
서블렛 경로설정 (0) | 2022.12.01 |
2022-09-21 국비지원 웹개발 27일차 (0) | 2022.10.02 |
2022-09-20 국비지원 웹개발 26일차 (0) | 2022.09.26 |
2022-09-19 국비지원 웹개발 25일차 (2) | 2022.09.20 |