개발자 끄적끄적

Mybatis 본문

Mybatis

Mybatis

햏치 2023. 3. 4. 15:00

<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");

'Mybatis' 카테고리의 다른 글

동적 SQL  (0) 2023.03.04