개발자 끄적끄적
Mybatis 본문
<MyBatis>
- 모든 MyBatis 애플리케이션은 SqlSessionFactory 인스턴스를 사용
- 개발자가 지정한 SQL, 저장 프로시저 및 고급 매핑을 지원한느
'퍼시스턴스 프레임 워크'이다
- 데이터베이스 레고드에 원시타입와 Map 인터페이스, POJO를 설정하고
매핑하기 위해 XML과 애너테이션을 사용할 수 있다
<Mapper 경로 지정 방법>
- mybatis는 자동으로 리소스를 찾는 방법을 제공하지 않는다
☆중요☆
<mappers>
<!--WEB-INF/classes안에있는경우-->
<mapperresource="member.xml"/>
<!--src/board안에있는경우-->
<mapperresource="board/board.xml"/>
<!--특정패키지안에있는경우-->
<mapperresource="kr/jobtc/myResource/geustbook.xml"/>
<!--특정디렉토리안에있는경우-->
<mapperurl="file:///a/b/c/member.xml"/>
</mappers>
<라이브러리 설치 및 환경 설정>
blog.mybatis.org 또는 mvnrepository.com을 방문하여 라이브러리 다운로드 후 압축해제
MyBatis>Products>MyBatis 3 (Description : SQL Mapping Framework for Java)다운
다운 압축 풀기>mybats-3.5.10.jar>WEB-INF/lib폴더에 복사>
src/java/mybatis 패키지(폴더)추가>카톡으로 받은 압축 파일을 해제한 후
mybatis 폴더에 복사(3개 다 복사)
<sqlMap>
- SqlMapper(<mappers/>)에 의해서
지정된 클래스 패스에 Sql 문장을 xml 유형으로 작성
• SQL 을 작성하는데 집중하도록 만들어졌다.
• JDBC 코드에 비해 최대 95% 이상 코드수가 감소하기도 한다.
• SQL 문장중 ${var} 또는 #{var}를 기술하는데 이는 PrepareStatement 문장의 역활을 하게 한다.
◦ ${var} 양옆에 작은 따옴표를 붙여주지 않는다.(잠재적인 SQL 주입 공격에 노출될 수
있음)
◦ #{var} 양옆에 작은 따옴표를 붙여준다.
◦ 예) id값이 park 인 경우
▪ where id=${id} where id=park
▪ where id=#{id} where id='park'
• insert, update, delete시 mybatis의 세션을 commit하고 닫아 주어야 한다.
• parameterType을 자바의 기본형을 사용할 때는 임의의 변수값으로 매핑되지만, 동적 SQL
문장등에서는 오류가 발생한다. 따라서 매핑될 변수명은 ‘_parameter’를 사용하는 것이 안전하다.
<resultType>
- select된 결과를 어떤 유형으로 반환할 지를 지정한다
1. 기본형
- 매핑되는 변수명엔 임의의 변수명을 사용해도 되지만 '_parameter'를
사용하는 편이 안전하다
2. 객체형
3. resultMap형
<resultType이 기본형인 경우>
<select id='list' resultType='String'>
select 절
</select>
[두건 이상인 경우]
List<String> list = (ArrayList)sqlSession.selectList("board.list");
[한건인 경우]
String str = (BoardVo)sqlSession.selectOne("board.list");
<resultType이 객체형인 경우>
<select id='list'
resultType='board.BoardVo'>
select 절
</select>
[두건 이상인 경우]
List<Boardvo> list =
(ArrayList)sqlSession.selectList("board.list");
[한건인 경우]
BoadVo vo = (BoardVo)sqlSession.selectOne("board.list");
<resultType이 resultMap인 경우>
<select id='list'
resultType='board_map'>
select 절
</select>
[두건 이상인 경우]
List<BoardVo> list =
(ArrayList)sqlSession.selectList("board.list");
[한건인 경우]
BoardVo vo = (BoardVo)sqlSession.selectOne("board.list");