/*
* 12장 마이바티스
*
* # What?
*
* 마이바티스는 자바 퍼시스턴스 프레임워크의 약자로 XML 서술자나 어노테이션을 사용하여 저장 프로시저나 SQL문으로 객체들을 연결시킨다.
* 마이바티스는 Apache 라이선스 2.0으로 배포되는 자유 소프트웨어다.
*
* # 마이바티스를 사용함으로써 얻을 수 있는 이점
*
* - SQL의 체계적인 관리
* - 자바 객체와 SQL 입출력 값의 투명한 바인딩
* - 동적 SQL 조합
*
* # 마이바티스 설정
*
* - 의존관계 정의(pom.xml)
* > mybatis
* > mybatis-spring
* > spring-jdbc
* > commons-dbcp2
* > log4jdbc-log4j2-jdbc4
* > ojdbc6s or 8
*
* - 스프링과 마이바티스 연결 설정 (root-context.xml 설정)
* > dataSource
* > sqlSessionFactory
* > sqlSessionTemplate
* > basePackage
*
* - 마이바티스 설정 (mybatisAlias.xml 설정)
* > 마이바티스의 위치 설정은 root-context.xml의 sqlSessionFactory 설정할 때 property 요소로 적용
*
* # 테이블 생성
*
* - board, member, member_auth 테이블 생성
*
*
*/
<!-- Datebase 라이브러리 등록 시작 -->
<!-- XML로 쿼리를 작성하게 해주는 라이브러리 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<!-- 스프링과 mybatis를 연동하게 해주는 라이브러리 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
<!-- 스프링에서 JDBC (java Database Connectivity -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!--
dbcp 설정
database connection pool => 커넥션 객체를 미리 만들어놓고 쓰고/반납, 최근에서 hikaricp를 사용하는 경우도 있음
-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
<!-- 로깅을 위한 라이브러리, 쿼리를 console이나 파일 로그로 볼 수 있음 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
<!-- oracle java database connectivity 드라이버 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.1.0.0</version>
</dependency>
<!-- Datebase 라이브러리 등록 끝 -->
스프링과 마이바티스 연결 설정 (root-context.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!--
root-context.xml : 스프링 설정을 위한 파일
스프링 설정이란?
- view와 관련되지 않은 객체를 정의
- Service(비즈니스 기능), DAO(Repository: 저장소), DB 등 비즈니스 로직과 관련된 설정
- BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName() = "oracle.jdbc.driver.OracleDriver";
-->
<!-- dataSource : 데이터베이스와 관련된 정보를 설정한다. -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="dev"/>
<property name="password" value="java"/>
</bean>
<!--
데이터베이스와 연결을 맺고 끊어질 때까지의 라이프 사이클을 관리해주는 SqlSessionTemplate 객체를 생성
1) dataSource
2) Mapper xml의 위치 지정(- /src/main/resources/) > 우리가 sqlmap 생성해야한다.
3) mybatis config 설정 xml 위치 지정 > 우리가 mybatisAlias.xml 생성해줘야한다
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:/sqlmap/**/*_SQL.xml"></property>
<property name="configLocation" value="/WEB-INF/mybatisAlias/mybatisAlias.xml"></property>
</bean>
<!--
데이터베이스에 개별적으로 쿼리를 실행시키는 객체.
이 객체를 통해서 query를 실행한다.
-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" index="0" ref="sqlSessionFactory"/>
</bean>
<!--
Mapper 인터페이스 설정
개발자가 직접 DAO를 설정하지 않아도 자동으로 Mapper 인터페이스를 활용하는 객체를 생성하게 된다.
DAO 역할을 대신할 Mapper 인터페이스의 위치를 알려준다.
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="kr.or.ddit.mapper"></property>
</bean>
</beans>
2-1. Mapper xml의 위치 지정(- /src/main/resources/) > 우리가 sqlmap 생성해야한다.
2-2. mybatis config 설정 xml 위치 지정 > 우리가 mybatisAlias.xml 생성해줘야한다.