
<!-- DBCP 사용을 위한 DataSource를 Bean으로 등록-->
<!-- DataSource란? : java에서 Connection Pool을 지원하기 위한 인터페이스-->
<!-- BasicDataSource : DataSource인터페이스를 구현한 클래스, 아파치 commons.dbcp에서 제공-->
<!-- destroy-method="close" : 주어진 세션을 자동으로 반환(close)하라는 설정-->
<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=
“ kh_final" />
<property name="password" value=“kh_final1234" />
<!-- defaultAutoCommit: SQL 수행 후 자동 COMMIT 설정. (기본값 : true) -->
<property name=
" defaultAutoCommit" value="false" />
<!-- 커넥션 풀 설정-->
<property name=
"initialSize" value="10" /> <!-- 초기커넥션수 , 기본0 -->
<property name=
"maxTotal" value="500" /> <!-- 최대커넥션수 , 기본8 -->
<property name=
"maxIdle" value="100" /> <!-- 유휴상태로존재할수있는커넥션최대수 , 기본8 -->
<property name=
"minIdle" value="10" /> <!-- 유휴상태로존재할수있는커넥션최소수 , 기본0 -->
<property name=
"maxWaitMillis" value=
"
-1" /> <!-- 예외발생전커넥션이반환될떄까지대기하는최대시간 ( ms), 기본-1( 무기한 ) -->
</bean>
DataSource란? : java에서 Connection Pool을 지원하기 위한 인터페이스
<property name="defaultAutoCommit" value="false" />
defaultAutoCommit: SQL 수행 후 자동 COMMIT 설정. (기본값: true)
<property name="initialSize" value="10" />
초기 커넥션수, 기본0
<property name="maxTotal" value="500" />
<property name="maxIdle" value="100" />
<property name="minIdle" value="10" />
초기 커넥션수, 기본0
최대 커넥션수, 기본8
유휴 상태로 존재할 수 있는 커넥션 최대수, 기본8
유휴상태 : 가만히 있는 상태(동작 X)
<property name="maxWaitMillis" value="-1" />
예외발생 전 커넥션이 반환될 떄 까지 대기하는 최대 시간(ms), 기본-1(무기한)
SqlSession : sql 구문을 DB에 전달, 실행하는 객체
SqlSessionFactory : SqlSession을 만드는 객체
sqlSessionFactoryBean: mybatis 설정 파일(mybatis-config.xml)과 Connection Pool 정보를 이용하여 SqlSessionFactory를 만드는 객체
sqlSessionTemplate : SqlSession객체에 트랜잭션 처리 역할이 가능하도록 하는 객체
<!-- SqlSession : sql구문을 DB에 전달, 실행하는 객체
SqlSessionFactory : SqlSession을 만드는 객체
sqlSessionFactoryBean : mybatis 설정 파일(mybatis-config.xml)과 Connection Pool 정보를 이용하여 SqlSessionFactory를 만드는 객체
sqlSessionTemplate : SqlSession 객체에 트랜잭션 처리 역할이 가능하도록 하는 객체-->
<!-- 마이바티스 SqlSession 등록하기 (xml 방식으로 bean 등록) -->
<bean id=
" sqlSessionFactoryBean" class=
" org.mybatis.spring.SqlSessionFactoryBean" >
<!-- mybatis-config.xml 설정 불러오기-->
<property name=
" configLocation" value=
" classpath:mybatis-config.xml" />
<property name=
" dataSource" ref=
" dataSource" />
</bean>
<!-- SqlSessionTemplate : 기본 SQL 실행 + 트랜잭션 관리 역할을 하는 SqlSession을 생성할 수 있게 하는 객체(Spring bean으로 등록해야함.) -->
<bean id=
" sqlSessionTemplate" class=
" org.mybatis.spring.SqlSessionTemplate" >
<constructor-arg ref=
" sqlSessionFactoryBean" />
</bean>
<!-- 스프링에서 사용하는 proxy를 이용한 트랜잭션 제어가 안될 경우 추가적인 트랜잭션 매니저를 추가해서 문제 해결-->
<bean id=
"transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
<property name=
" dataSource" ref=
" dataSource" />
</bean>

‘src/main/resources’폴더에 ‘mappers’ 폴더 생성 후 mapper.xml 파일 생성


• <resultMap> 태그 :
SELECT 조회 결과(ResultSet)의 컬럼명과 VO객체의 필드명이 일치하지 않을 때 어떤 컬럼과 필드가 매칭 되어야 하는지 지정하는 태그
<resultMap> 태그 예시
<resultMap>의 type 속성은 실제로 구현해 놓은 자바 POJO 객체를 사용해야 하며, mybatis-config.xml에서 typeAlias를 지정하지 않은 경우, 패키지 명부터 클래스 명 까지 모두 기술해야 됨
<mapper> 태그를 작성하고, 외부에서 접근할 수 있는 이름인 namespace 속성을 기입,<mapper>태그 안에 기록하면 됨
<resultMap> 태그 : 조회한 결과를 객체와 Row간의 1:1 매칭이 아닌, 원하는 객체의 필드에 담아 반환하고자 할 때 사용하는 태그<resultMap> 태그 예시
<resultMap>의 type 속성은 실제로 구현해 놓은 자바 POJO 객체를 사용해야 하며, mybatis-config.xml에서 typeAlias를 지정하지 않은 경우, 패키지 명부터 클래스 명 까지 모두 기술해야 됨<select> 태그 : SQL의 조회 구문을 작성할 때 사용되는 태그로, 해당 쿼리를 외부에서 접근하고자<select> 태그 예시
MyBatis에 작성되는 SQL에서 #{}, ${} 의 의미
- #{ } : PrepareStatement의 위치홀더(?)의 역할로 전달된 값을 의미함.
- ${ } : Statement의 역할로 SQL 구문 자체를 의미함.
<select> 태그 주요 속성
<insert>, <update>, <delete> 태그 : 해당 태그들은 설정이 동일<insert> 태그 예시
parameterType="Member"
파라미터로 객체를 받는 경우 해당 객체의 필드
<update> 태그 예시
<delete> 태그 예시
<insert>, <update>, <delete> 태그 주요 속성