[MyBatis] 구조, 설정, Handler, Mapper 사용

*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.xmlid”); // 값 없이 insert 할때

    ss.insert(“mapper.xmlid”, ); //값을 사용하여 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

 - PreparedStatementbind변수는 like ‘%’와 같이 사용되면 bind변수를 인식하지 못한다.

 

  <select id=“아이디resultType=“단일형,Domain,DTOparameterType=“단일형, 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