Back-end/JAVA,Spring

마이바티스 란? mybatis 설정방법 및 순서.

cheersHena 2018. 11. 8. 15:51
반응형

myBatis 마이바티스란?



객체 지향언어인 자바의 관계형 데이터베이스 프로그래밍을 쉽게 도와주는 프레임워크.

자바에서는 관계형 데이터베이스 프로그래밍을 하기위해 JDBC를 제공한다. 

  

※ JDBC(Java Database Connectivity) 

자바 프로그램이 데이터베이스와 연결되어 데이터를 주고 받을 수 있게 해주는 인터페이스이다.

(DriverClass, Connection, PreparedStatement, ResultSet etc...)


JDBC는 다양한 API를 제공하지만, 각각 기능을 사용하기위해서는 관련 객체를 생성하고 해제해야하는 단점이 존재.


마이바티스는 이 JDBC를 보다 편하게 사용하기 위해 개발되었다. 

SQL문을 별도의 파일로 분리해서 관리하도록 해준다. 


스프링의 하청이라고 할수 있음. 컨트롤러, 서비스는 다 스프링이 하지만 레파지토리 영역(dao)은 마이바티스에게 위임시킨다.

위임역할: sql관리, 파라미터 대입, 실행, 결과 매핑해서 서비스영역으로 바로 돌려줌.
 
개발자가 쿼리를 직접실행하지않고 설정만 해주면 된다. 
쿼리 작성, 매개변수, 결과타입 지정 설정만 해주면 마이바티스가 알아서 쿼리를 실행한다.
 dao인터페이스에서 기존에 있었던 구현체(daoImpl.java)가 사라지게 된다.

myBatis의 특징


SQL문의 코드로부터 완전히 분리.

-기존 dao파일에 모든 sql쿼리문을 작성하였다. 

 하지만 마이바티스에서는 xml의 Mapper파일에 sql쿼리문을 입력하고 dao에서 호출하여 사용한다.


생산성

 -코드가 줄어들고 가독성이 좋아짐


유지보수성 향상

 -mapper파일에 sql코드를 모아놓고 sql쿼리문 변경시 mapper파일만 수정하면 dao에서는 아무런 영향도 받지 않는다. 단지 수정된 코드를 그대로 호출하면 된다.





myBatis 설정방법 및 순서


 pom.xml 라이브러리 추가.


② 마이바티스 설정


spring <-> mybatis <-> datasource 연결 설정 

*서비스는 dao interface찾아가서 구현체의 메서드 호출.
이 구현부의 역할을 마이바티스가 하게되는데 이를 위해 설정필요.

필요한 설정들:
- dao interface위치 설정. 
- sql 설정(위치/ 쿼리) 
- dto사용시 dto설정

1) main/resources > mybatis-configuration
2) main/resources > sql > SQL.*.xml

** 이때 SQL xml ,mybatis-configuration  에 DTD 독타입 추가해주어야 인식할수 있다.
[SQL.xml ]
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">


[mybatis-configuration.xml]
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis



설정: dao 영억 - > Spring-beans.xml 에 dao 빈추가.

sql factory bean 4가지(+1가지) 프로퍼티 설정: 
1. 디비 연결 /끊고 하기위해 데이터 소스 필요 datasource 
2. myBatis설정 : 카멜이나 dto 등 필요한게 있으면 [mybatis-configuration.xml] 에 설정
3. 쿼리 위치 xml
4. 트랜젝선 팩토리: 커밋 설정 
+ dao인터페이스 위치 빈 설정: 패키지경로 : base-package에 dao 있음.  

[Spring-beans.xml]

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--1. DB접속설정 -->
<property name="dataSource"  ref="dataSource" /> 

<!--2. myBatis 기본설정  -->
<property name="configLocation" value="classpath:mybatis-configuration.xml" />

<!-- 3. query적힌 xml 위치  --> 
<property name="mapperLocation"  value="classpath:sql/SQL.*.xml" />
<!-- 4. 트랜잭션 관리 위한 설정  -->
<property name="transactionFactory"  />
</bean>

<!-- +  dao위치를 basepackage로 : 
작업지시서(dao)가 있는 패키지위치를 잡아 줘야 사용가능.  -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.tj.dao" />
</bean>



  myBatis 기본설정 후, value 에 따른 파일 추가해 주어야한다. 


sql>  SQL.~~Dao.xml  파일로 구현체를 옮긴다. 
(존재하는 모든 daoImp을 sql.~~dao.xml 파일로 바꿔줘야함.) 
Dao interface의 메소드는 모두 SQL.xml 에 존재해야한다.

<mapper namespace="com.tj.dao.~~~Dao" > 경로설정 해주고 쿼리작성!  
<select> SELECT~~  </select> ...  
<mapper>

④ dao 를 sql.xml로 변경했으면 기존의 @Repository는 삭제하거나 주석처리로 없애준다. 
(아니면 중복문제 발생.)

❌** 트렌젝션이 일어나는 작업 (커밋, 롤백)은 컨트롤러에서 할 수 없다 ! 서비스에서 해야한다 !  
ex) 하나의 작업이 4단꼐인데 3단계까지 성공, 4단계 실패하는경우 
     다시 앞에 3단계 롤백해야함 -> 트랜젝션 발생.
     delete와 update는 트렌젝션(롤백) 가능.  (컨트롤러에서는 롤백이 안됨.)  










반응형