[Spring] MyBatis 구조와 개념
MyBatis
- 객체지향언어인 자바의 관계형 데이터베이스 프로그래밍을
좀 더 쉽게 구현할 수 있도록 도와 주는 개발 프레임워크
- 자바는 JDBC API를 제공해 주지만, 이런 JDBC를 이용하면
한 개의 클래스에 반복된 코드가 존재,
한 파일에 Java 언어와 SQL 언어가 섞여 있어서 재사용성 등이 안 좋아지는 단점이 발생함
- MyBatis는 이러한 JDBC의 단점들을 개선했으며,
개발자가 작성한 SQL 명령어와 자바 객체를 매핑해 주는 기능을 제공하며,
기존에 사용하던 SQL 명령어를 재사용이 가능하게 해 줌.
MyBatis 의 특징
- 한 두 줄의 자바 코드로 DB 연동을 처리해 줌.
- SQL 명령어를 자바 코드에서 분리하여 XML 파일에 따로 관리.
* MyBatis 설정 작업
- 스프링과 MyBatis를 연동하기 위한 라이브러리 설정 - pom.xml
- MyBatis 프레임워크 라이브러리 추가.
- MyBatis-Spring 라이브러리 추가.
- Spring-JDBC 라이브러리 추가.
- 데이터베이스와 연결을 담당하는 DataSource 객체 설정.
https://m.blog.naver.com/scw0531/220986622908
아래 내용은 위 블로그를 많이 참조하여 수업 중에 배운 내용과 함께 작성하였습니다!
1. 스프링 기반 프로젝트 생성
메뉴 중 Spring Legacy Project를 선택
2. 프로젝트 명 입력 및 MVC구조 선택
3. 초기 패키지 지정
초기 시작 패키지를 설정하는 부분으로 어떤 특정 규칙이 있진 않지만 MVC구조로 볼때 처음 패키지 이름은 controller라고 명명한다. 앞에 com. 부터 작성해나가야 한다. 완료 버튼을 누르면 해당 프로젝트가 생성이 되고 오른쪽 맨 하단에 프로젝트 로딩이 된다. 이 로딩중에는 프로젝트가 에러가 난 상태로 되는데 이상이 있는것이 아니라 로딩 중이기 때문에 잠시만 기다리면 된다.
4. 패키지 구조 설정
위와같은 구조로 자동적으로 생성 후 개발을 시작한다.
설정 작업
1) pom.xml
기본적으로 Spring 환경에서 xml파일은 설정역할을 한다.
즉 무엇인가를 정의하거나 환경설정을 통해 프로그램이 실행되는 동안 동작하게 끔 하는 역할을 한다.
mybatis에 필요한 라이브러리 추가
https://mvnrepository.com/artifact/org.mybatis/mybatis
mybatis, mybatis-spring 라이브러리 pom.xml 파일에 추가
이 외에도 Spring JDBC, Connection Pool, lombok 라이브러리 등이 추가되어 있는 상태이다.
추가하고 저장을 눌러서 Maven Dependencies에 가면 해당 라이브러리가 정상적으로 추가되어 있는 지 확인할 수 있다.
(2) web.xml
이 역시도 xml 파일이기에 설정부분이라고 보면된다.
한글 인코딩 작업을 진행한다.
web.xml
<!-- 한글 인코딩 설정 작업 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param> <!-- 요청에 대한 한글 처리 -->
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param> <!-- 응답에 대한 한글 처리 -->
<param-name>forceEncoding</param-name>
<param-value>true</param-value> <!-- 응답에 대해서도 한글 인코딩을 하겠다. -->
</init-param>
</filter>
Spring DB 연동관련 설정 작업
Oracle DB와 연동하기 위해 root-context.xml파일에 다음 내용을 추가한다.
<!-- 1. c3p0커넥션풀 DataSource 클래스 설정 -->
<bean name="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:XE" />
<property name="user" value="web" />
<property name="password" value="1234" />
<property name="initialPoolSize" value="10"/> <!-- 초기 풀 사이즈 -->
</bean>
<!-- 2. sqlsessionFactoryBean 클래스 설정 -->
<bean name="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 경로를 기본적으로 src/main/resource로 잡아준다. -->
<property name="mapperLocations" value="classpath:/mapper/*.xml"/>
</bean>
<!-- 3. SqlSessionTemplate 클래스 설정-->
<bean name="sqlSessionTemplate"
class="org.mybatis.spring.SqlSessionTemplate">
<!-- 생성자를 통해 주입받음 -->
<constructor-arg ref="sqlSessionFactory"/>
</bean>
오라클 사용자 이름과 비밀번호는 본인이 생성한 DB 사용자로 설정하면 된다.
위의 <bean> 안의 내용은 오라클 DB와 연결하는 내용이고
아래 <bean> 안의 내용은 연결한 오라클 DB에 관한 설정 파일들에 관한 내용이다.
또한, src/main/resources 안에 mapper 폴더를 만들고 그 안에 Emp.xml파일을 생성한다.
이 경로 또한 root-context.xml안에 정의했다.(두번째 문단)
context:component-scan 경로 수정
*base-package : 패키지를 어디부터 스캔할지 지정해주는 부분
context:component-scan의 경로를 아래와 같이 수정하여
해당 경로를 포함한 모든 하위 경로에 적용되어 애노테이션을 명시한 자바 파일들이 Bean으로 동록 되어 사용 가능해진다.
이제 다음 포스팅을 통해 예제를 통해 mybatis 방식을 접해보자(JDBC)