*MyBatis
- DB Mapper Framework.( Persistence Framework – 영속성 Framework)
- Apache Software Foundation에서 iBATIS라는 이름으로 시작한 프레임워크.
( apache -> google -> github )
- 다양한 언어를 지원( java, .net)
- 언어에서 사용하는 데이터 형을 그대로 사용할 수 있다.
- 유연성이 높다.( 쿼리문을 XML로 분리하여 작성하고 사용 )
- 언어의 코드가 간결해진다.
- mybatis.org에서 다운받을 수 있다.
*MyBatis 구조
*설정
1.WEB-INF/lib/mybatis-x.x.x.jar 배포 ( MAVEN 사용 )
2.환경설정용 XML작성 ( mybatis-config.xml )=> 드라이버, URL, 계정정보, Mapper연결
4. MyBatis Framework 생성
-SqlSessionFactoryBuilder : 설정파일과 연결한 Stream을 입력받아, DB연결관리,
XML의 설정정보와, 쿼리문을 Parsing, Parsing된 쿼리문을 실행,
쿼리문 실행하기위한 접속자 Session을 확립하는 일
-SqlSessionFactory : SqlSessionFactoryBuilder 의 부모
-SqlSession : MyBatis Handler( MyBatis Framework을 사용하여 DB작업 수행 )
4-1. 설정용 XML과 연결
Reader reader=Resources.getResourceAsReader(“패키지명/설정파일명.xml”);
4-2. MyBatis Framework 생성
SqlSessionFactory ssf=new SqlSessionFactoryBuilder().build( reader );
4-3. MyBatis를 조작하기위해 MyBatis Handler 얻기
SqlSession ss=ssf.openSession(); // auto commit이 해제된 상태로 handler 얻을 때
SqlSession ss=ssf.openSession(true); // auto commit이 설정된 상태로 handler 얻을 때
4-4. Handler 사용.
ss.insert(“mapper.xml의 id”); // 값 없이 insert 할때
ss.insert(“mapper.xml의 id”, 값 ); //값을 사용하여 insert 할때
4-5. Transcation 처리
ss.commit(); ss.rollback();
4-6. 연결끊기 : ss.close();
*properties
- 프로그램에서 사용하는 설정 값을 저장하거나, 국제화(여러나라 언어로 서비스)할 때 주로 사용.
- 저장되는 값과 이름을 =으로 구분하여 작성. (이름=값) –사용자에러를 감소 시킬 수 있다.
- 값에 공백이 들어가면 공백까지 값으로 인식.( 띄어쓰기 주의)
- 주석은 #으로 시작
적용) mybatis-config.xml에서 설정정보를 database.properties로 분리작성
*Mapper 작성법
- query 문이 정의되는 XML.
1.설정파일 ( mybatis-config.xml)에 mapper node로 연결
2. mapper.xml에 쿼리문을 작성
*쿼리문을 작성
*insert
-레코드를 추가할 때 사용.
<insert id=“아이디” parameterType=“쿼리문에 들어갈 값”>
insert into 테이블명( 컬럼명,,, ) values ( #{ 이름 } ,,,, )
</insert>
*parameterType에서 입력되는 값을 사용하는 부분( bind 변수 사용)
입력되는 값은 #{ 이름 }, ${ 이름 }으로 사용할 수 있다.
#{ } – PreparedStatement 의 bind변수 ( ? ) 로 변환되어처리
${ } – 입력값이 쿼리문에 직접 생성된다. ( 테이블명이나 컬럼명 )
-이름
복합형 ( VO,DTO )인 경우 => #{ getter명 }
단일형 ( int, Integer )인경우 => #{ 아무말대잔치 }
Handlder 사용)
1.Handler 얻기
SqlSession ss
=SqlSessionFactory.openSession();
2. Handler를 사용하여 쿼리문을 찾아서 실행하고, 결과값을 얻는다.
외부의 값없이 추가
int cnt=ss.insert(“아이디”)
외부의 값을 사용하여 추가
int cnt=ss.insert(“아이디”, 값)
*like
- PreparedStatement의 bind변수는 like ‘%’와 같이 사용되면 bind변수를 인식하지 못한다.
<select id=“아이디” resultType=“단일형,Domain,DTO” parameterType=“단일형, DTO, VO”>
select 컬럼명,,,,,
from 테이블명
where 컬럼명 like %#{ 이름 }%
</select>
*resultMap
-조회되는 컬럼과 일치하는 setter method를 호출하여 조회결과 값을 입력해준다.
<resultMap> 을 사용하면 개발자가 명시한 method로 값이 할당된다.
*사용법
1. <resultMap>을 선언
<resultMap id=“아이디” type=“패키지명.클래스명 | typeAlias id명”>
<result column=“컬럼명” property=“setter”/>
<result column=“컬럼명” property=“setter”/>
.
</resultMap>
2. <select> 에서 resultMap 속성을 사용하여 연결.
<select id=“” resultMap=“resultMap아이디”
*주의 resultType=“resultMap을 사용할 수 없고 ”
resultType을 사용하든 resultMap을 사용하든 하나만 사용할 수 있다.
'MyBatis' 카테고리의 다른 글
[Mybatis] Procedure 호출 (0) | 2025.08.31 |
---|---|
[Mybatis] 동적쿼리, 관계연산자, if, choose, foreach, set (0) | 2025.08.31 |