Spring / JDBC / Mybatis 관련 설정하기, mapper 설정하기

oYJo·2025년 3월 12일

Spring

목록 보기
6/29

Spring, JDBC, Mybatis 관련 설정하기(root-context.xml)

1️⃣ root-context.xml 설정 추가

DBCP(커넥션풀) 설정 추가

<!-- 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 관련 설정 및 트랜잭션 제어 설정 추가

<!-- 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>

2️⃣ mybatis-config 설정하기- 참고

Mybatis 내장 별칭


mapper 설정하기

1️⃣ mapper 설정하기

*-mapper.xml 생성 위치

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


*-mapper.xml 작성

• <resultMap> 태그 :
SELECT 조회 결과(ResultSet)의 컬럼명과 VO객체의 필드명이 일치하지 않을 때 어떤 컬럼과 필드가 매칭 되어야 하는지 지정하는 태그

  • <resultMap> 태그 예시
  • <resultMap>의 type 속성은 실제로 구현해 놓은 자바 POJO 객체를 사용해야 하며, mybatis-config.xml에서 typeAlias를 지정하지 않은 경우, 패키지 명부터 클래스 명 까지 모두 기술해야 됨
  • xml 최상단에 다음과 같이 xml 형식을 지정하여 이하의 설정 내용이 mybatis mapper 설정임을 선언
  • 이어서 <mapper> 태그를 작성하고, 외부에서 접근할 수 있는 이름인 namespace 속성을 기입,
    이 후 작성될 태그들은 <mapper>태그 안에 기록하면 됨
  • <resultMap> 태그 : 조회한 결과를 객체와 Row간의 1:1 매칭이 아닌, 원하는 객체의 필드에 담아 반환하고자 할 때 사용하는 태그
  • <resultMap> 태그 예시
  • <resultMap>의 type 속성은 실제로 구현해 놓은 자바 POJO 객체를 사용해야 하며, mybatis-config.xml에서 typeAlias를 지정하지 않은 경우, 패키지 명부터 클래스 명 까지 모두 기술해야 됨
  • <select> 태그 : SQL의 조회 구문을 작성할 때 사용되는 태그로, 해당 쿼리를 외부에서 접근하고자
    할 때 namespace.id 명을 적어 접근 가능
  • <select> 태그 예시

MyBatis에 작성되는 SQL에서 #{}, ${} 의 의미

  • #{ } : PrepareStatement의 위치홀더(?)의 역할로 전달된 값을 의미함.
  • ${ } : Statement의 역할로 SQL 구문 자체를 의미함.

2️⃣ mapper 설정하기- 참고

<select> 태그 주요 속성


3️⃣ mapper 설정하기

*-mapper.xml 작성

  • <insert>, <update>, <delete> 태그 : 해당 태그들은 설정이 동일
  • <insert> 태그 예시

parameterType="Member"
파라미터로 객체를 받는 경우 해당 객체의 필드

  • DML 구문은 SQL 수행이 성공된 행의 개수를 반환하기 때문에
    별도의 resultType, resultMap 속성을 작성하지 않음
  • <update> 태그 예시
  • <delete> 태그 예시

<insert>, <update>, <delete> 태그 주요 속성

profile
Hello! My Name is oYJo

0개의 댓글