====== Mybatis(마이바티스) 사용법, 예시 ======
* description :
* author : 주레피
* email : dhan@repia.com
* lastupdate : 2020-01-31
===== mapper.xml 예시 =====
SELECT 예시
> resultType이 명시되어야 한다.
UPDATE 예시
update tbl_board set count = count + 1 where seq = #{seq}
> parameterType은 입력 값이다.
DELETE 예시
delete from tbl_board where seq=#{seq} and password=#{storPass}
> parameterType은 입력 값이다.
[[https://hunit.tistory.com/200|MYBATIS로 DB 연동]]
INSERT 예시
insert into Students ( name, email )
values ( #{name}, #{email} )
> selectKey 옵션을 사용하여 오라클에도 적용이 가능하다
select SEQ_ID.nexyval FROM DUAL
insert into Students
(id, name , email)
values
(#{id}, #{name}, #{email})
[[http://www.mybatis.org/mybatis-3/ko/sqlmap-xml.html|Mapper XML 파일]] \\
[[https://taetaetae.github.io/2017/04/04/mybatis-useGeneratedKeys/|mybatis insert/update 쿼리실행후 결과 가져오기]] \\
===== 동적 쿼리 =====
[[http://blog.naver.com/roropoly1/221184569655|myBatis parameterType="String" 일 때 동적쿼리에서 사용]]
===== 배치(Batch) 입력/수정 =====
[[https://vivi-world.tistory.com/13|[Mybatis/MariaDB] foreach 구문을 이용해서 Insert 대량 삽입하기]] \\
[[https://baejangho.com/entry/Java-Mybatis-Batch-Insert|[Java / Mybatis] 일괄(Batch) 입력/수정(Insert/Update)]] \\
===== choose =====
[[https://kmhan.tistory.com/43|[Mybatis] if else문 대체하는 방법]] \\
===== Null체크 (ibatis와 비교) =====
>Mybatis
조건문
>ibatis
조건문
[[https://hellogk.tistory.com/100|mybatis와 ibatis별 동적태그 비교문 알아보도록 하자]] \\
[[https://web-obj.tistory.com/246|ibatis to mybatis 전자정부프레임워크]] \\
[[https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:psl:dataaccess:mybatisguide|MyBatis 적용 가이드]] \\
===== ResultHandler =====
[[https://kongeebol.tistory.com/2|[Excel POI] Mybatis ResultHandler 사용하여 대용량 데이터 추출]] \\
===== ResultType & ResultMap =====
[[https://dorongdogfoot.tistory.com/124|[MyBatis] resultMap 과 resultType (resultClass) 의 차이점]] \\
===== Test =====
[[https://sinpk.tistory.com/entry/Mybatis-if-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B9%84%EA%B5%90|Mybatis if 문자열 비교]] \\
[[https://madnix.tistory.com/entry/%EB%A7%88%EC%9D%B4%EB%B0%94%ED%8B%B0%EC%8A%A4%EB%8A%94-%EB%8F%99%EC%A0%81-%EC%BF%BC%EB%A6%AC%EB%AC%B8-%EC%83%9D%EC%84%B1%EC%97%90-%EC%82%AC%EC%9A%A9%EB%90%98%EB%8A%94-if-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C%EB%A5%BC-%EC%A0%9C%EA%B3%B5|마이바티스는 동적 쿼리문 생성에 사용되는 구성 요소를 제공...]]
===== Tip =====
* DBCP 기본값
> initialSize: 연결 풀이 최초 생성될 때 같이 이 숫자만큼 데이터베이스 연결을 미리 생성합니다. 기본값은 0입니다.
> maxActive: 동시에 사용할 수 있는 최대 연결의 갯수 입니다. 음수이면 제한이 없습니다. 기본값은 8 입니다.
> 이 갯수를 초과하여 요청이 들어오면 최대 maxWait 만큼 대기하고, 그래도 연결을 사용할 수 없을 때는 예외를 발생합니다.
> maxIdle: 풀에서 사용되지 않은 상태로 존재할 수 있는 최대 연결의 숫자 입니다. 음수이면 제한이 없습니다. 기본값은 8 입니다.
> maxActive가 10 이고, maxIdle이 8일 때 10개의 연결이 모두 사용되고 있는 상태를 가정해 봅니다. 연결이 사용을 마치고 하나씩 반환이 되면
> , maxIdle 숫자인 8개가 될때까지는 유휴 상태로 풀에 남겨집니다. 아홉번째 부터는 연결이 해제되어 제거 됩니다. 모두 반환된후에 풀에는 유휴상태인 8개의 연결이 남아 있습니다.
> minIdle: 풀에서 사용되지 않은 상태로 존재할 수 있는 최소 연결의 숫자 입니다. 기본 값은 0 입니다. 풀을 관리하는 쓰레드는 풀내의 유휴 연결의 최소 갯수를 이 값으로 유지합니다.
> 주로 발생하는 상황은 오류가 발생한 연결이나, 사용되지 않고 오래된 연결은 풀에서 제거됩니다. 이 경우 풀내의 연결의 갯수가 minIdle 이하로 떨어지면 새로 생성해서 minIdle 갯수에 맞추게 됩니다.
> maxWait - 풀에 사용 가능할 연결이 없을때 대기하는 최대 시간을 밀리초 단위로 나타냅니다. 이 대기시간후에도 사용 가능한 연결이 없으면 예외를 발생합니다. -1은 무한대기를 나타냅니다. 기본값은 -1입니다.
===== Troubleshooting =====
DAO에서 보낸 VO가 SQL에서 값이 사라져 버릴 경우
> 긴장하지 말고 pom.xml에서 mybatis, mybatis-spring 버전 업데이트 하면 해결이 됩니다.
===== Ref =====
* [[https://offbyone.tistory.com/161|전자정부 표준프레임워크 - dataSource (DBCP) 설정하기]]
* [[http://blog.naver.com/roropoly1/221184569655|myBatis parameterType="String" 일 때 동적쿼리에서 사용]]
* [[https://jsonobject.tistory.com/240|MyBatis, Dynamic SQL 기본식 알아보기]]
{{tag>주레피 eleven mybatis}}