05_Mybatis

김정욱·2023년 4월 24일
0

Spring

목록 보기
9/13
post-thumbnail
post-custom-banner

1) 개요

데이터의 입력, 조회, 수정, 삭제 (CRUD)를 보다 편하게 하기 위해 xml로 구조화한
Mapper 설정 파일을 통해서 JDBC를 구현한 영속성 프레임워크

기존의 JDBC에서 사용하던 부분들을 xml 설정을 통해 쉽게 할 수 있게 해준다

➡️ Mybatis API 사이트


2) Mybatis의 흐름


3) 라이브러리 추가

🔸JDBC 드라이버 (ojdbc11)
https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc11

🔸Spring에서 JDBC 지원하는 모듈 (spring-jdbc)
https://mvnrepository.com/artifact/org.springframework/spring-jdbc

🔸Mybatis 라이브러리 (mybatis)
https://mvnrepository.com/artifact/org.mybatis/mybatis

🔸Spring에서 쉽게 Mybatis를 사용 가능하게 만드는 모듈 (spring-mybatis)
https://mvnrepository.com/artifact/org.mybatis/mybatis-spring

🔸DataBase Connection Pool 사용을 위한 라이브러리 (commons-dbcp2)
https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2

pom.xml의 <dependencies></dependencies> 안에 코드 추가

4) Mybatis의 동작 구조


5) mybatis-config 설정하기

- Config
Location : http://mybatis.org/dtd/mybatis-3-config.dtd
Key type : Public ID
Key : -//mybatis.org//DTD Config 3.0//EN

- Mapper
Location : http://mybatis.org/dtd/mybatis-3-mapper.dtd
Key type : Public ID
Key : -//mybatis.org//DTD Mapper 3.0//EN

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>

  <!-- SqlSessionTemplate 생성 시 적용될 설정 작성 부분 -->
  <settings>
    <!-- insert 또는 update에 사용되는 값 중 null이 있을 경우에 대한 설정
    해당 설정이 없을 경우 -> SQL 구문에 null 포함되어 있다는 오류 발생.
    해상 설정이 있을 경우 -> 오류를 발생 시키지 않고 NULL 값을 컬럼에 대입
                  단, NOT NULL 제약조건이 없는 컬럼에만 가능함.

    ** value 설정 시 NULL 은 반드시 대문자로 작성 (소문자 null은 오류가 발생함) -->
    <setting name="jdbcTypeForNull" value="NULL"/>
  </settings>

  <!-- 별칭 작성 부분  -->
  <!-- VO클래스의 패키지명 + 클래스명 작성하는 것이 불편하기 때문에 짧은 별칭 부여 -->
  <typeAliases>
      <typeAlias type="edu.kh.fin.member.model.vo.Member" alias="Member"/>
  </typeAliases>

  <!-- mapper 파일(SQL 작성되는파일) 위치 등록 부분 -->
  <!-- <mapper resource="mapper 파일 경로"/> 
  	   경로를 작성하는 기준(시작지점)은 src/main/resources 폴더 -->
  <mappers>
      <mapper resource="/mappers/member-mapper.xml"/>
  </mappers>
 
</configuration>
⭐ 위의 코드 순서는 반드시 지켜져야 한다 ⭐

6) root-context.xml 설정하기

<!-- 
	root-context.xml 파일
	- web.xml에서 가장 먼저 읽어 들이는 설정 파일
	- 프로젝트 전반적으로 사용되는 자원을 생성(bean 등록)하고 설정하는 파일
	- DB 연결 관련 정보, 트랜잭션 처리, 파일 업로드 등을 작성
-->

<!-- 1. DBCP 사용을 위한 DataSource를 bean으로 등록 -->

<!-- DataSource : java에서 Connection Pool을 지원하기 위한 인터페이스(Connection 상위호환) -->
<!-- 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="community"/>
	<property name="password" value="1234"/>

	<!-- SQL이 수행된 후 자동으로 Commit 되는것을 지정 -->
	<property name="defaultAutoCommit" value="false"/>

	<!-- 커넥션 풀 설정 -->
	<property name="initialSize" value="10" /> <!-- 초기 커넥션 수, 기본 0 -->
	<property name="maxTotal" value="50" /> <!-- 최대 커넥션 수, 기본 8 -->
	<property name="maxIdle" value="20" /> <!-- 유휴 상태로 존재할 수 있는 커넥션 최대 수, 기본 8 -->
	<property name="minIdle" value="10" /> <!-- 유휴 상태로 존재할 수 있는 커넥션 최소 수, 기본 0 -->
	<property name="maxWaitMillis" value="-1" /> <!-- 예외 발생 전 커넥션이 반환 될 떄 까지 대기하는 최대 시간(ms), 기본 -1(무기한) -->

</bean>

<!-- 
	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>
profile
절박한 마음을 갖고 하루를 보내자!!
post-custom-banner

0개의 댓글