STUDY/SPRING

스프링(3.0) MyBatis 연결

Anne of Green Galbes 2019. 4. 17. 16:47

 MyBatis 연결JDBC를 MyBatis로 변경



1. 새 프로젝트 생성


2. 필요한 파일 복사


○ CustomDAO.java, CustomDTO.java, CustomMain.java, app-context.xml, pom.xml


3. MyBatis 라이브러리 다운

○ 라이브러리는 pom.xml에 작성

① myBatis

<!-- mybatis -->

<dependency>

  <groupId>org.mybatis</groupId>

  <artifactId>mybatis</artifactId>

  <version>3.5.1</version>

</dependency>

② MyBatis Spring

<dependency>

   <groupId>org.mybatis</groupId>

   <artifactId>mybatis-spring</artifactId>

   <version>2.0.1</version>

</dependency>

③ app-context.xml 작성

○ SQL Session FactoryBean

 - 데이터 소스를 읽는다

 - 무조건 작성

<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<!-- 데이터가 sqlsessionFactoryBean 여기에 있는 setter에 들어감  -->

<property name="dataSource" ref="dataSource"/>

</bean>

○ Session Template

 - SQL Session FactoryBean를 읽어낸다

<bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">

<constructor-arg ref="sessionFactory"></constructor-arg>

</bean>

○ 최종

<!-- customDAO만 사용하면 밑에 작성한 아이들이 다 따라온다 -->

<bean id="customDAO" class="com.exe.springmybatis.CustomDAO">

<property name="sessionTemplate" ref="sessionTemplate"/>

</bean>

<bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">

<constructor-arg ref="sessionFactory"></constructor-arg>

</bean>

<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

</bean>

<bean id="dataSource"

class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close"

p:driverClassName="oracle.jdbc.driver.OracleDriver"

p:url="jdbc:oracle:thin:@192.168.16.8:1521:TestDB"

p:username="SUZI"

p:password="A123"/>


4. xml파일 생성

○ 이름 : mybatis-config

○ app-context.xml에서 mybatis-config.xml의 위치정보를 가지고 있어야 한다

○ sql파일의 경로를 설정해준다


① app-context.xml

<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<property name="configLocation"

    value="classpath:/com/exe/springmybatis/mybatis-config.xml"/>

</bean>

② mybatis-config.xml

○ sql이 들어 있는 파일을 지칭

○ 스프링과 연결할 때

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

<mappers>

<mapper resource="com/exe/mapper/customMapper.xml"/>

</mappers>

</configuration>

○ 다른 프레임워크랑 연결할 때는 추가로 작성

<configuration>

<!-- 다른 프레임워크랑 연결할때는 이 두개가 필요 -->

<!-- oracle.jdbc.driver.OracleDriver내용이 driver에 들어가고 -->

<properties>

<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>

<property name="url" value="jdbc:oracle:thin:@192.168.16.8:1521:TestDB"/>

<property name="username" value="SUZI"/>

<property name="password" value="A123"/>

</properties>

<!-- 위 driver의 내용이 아래 driver에 들어감 -->

<environments default="development">

<environment id="devolopment">

<transactionManager type="JDBC"/>

<dataSource type="POOLED">

<property name="driver" value="${driver}"/>

<property name="url" value="${url}"/>

<property name="username" value="${username}"/>

<property name="password" value="${password}"/>

</dataSource>

</environment>

</environments>


</configuration>


5. Mapper xml 파일 생성

○ sql문을 작성 할 파일

① customMapper.xml

 ○ parameterType : 받는 변수형

 ○ resultType : 결과로 나오는 변수형

 ○ #{□□□} = #□□□#과 같이 사용

 ○ namespace는 귀찮아도 패키지이름을 다 적어주는 경우가 많음

다른 사람과 겹칠 수 있기 때문

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">


<mapper namespace="com.exe.mapper">

<insert id="insert" parameterType="com.exe.springmybatis.CustomDTO">

insert into custom (id,name,age) values (#{id},#{name},#{age})

</insert>

</mapper>


6. CustomDAO 작성

○ 기본

package com.exe.springmybatis;


import org.mybatis.spring.SqlSessionTemplate;


public class CustomDAO {

private SqlSessionTemplate sessionTemplate;

public void setSessionTemplate(SqlSessionTemplate sessionTemplate) {

this.sessionTemplate = sessionTemplate;

}

}

○ 값을 주는 경우

 - com.exe.mapper 는 customMapper.xml에서 mapper의 namespace

public void insertData(CustomDTO dto) {

sessionTemplate.insert("com.exe.mapper.insert",dto);

}

public CustomDTO getReadData(int id){

CustomDTO dto = sessionTemplate.selectOne("com.exe.mapper.listOne",id);

return dto;

}


7. 에러가 발생할 경우

① ArrayIndexOutOfBoundsException

○ 라이브러리의 버전을 변경

<!-- mybatis -->

<dependency>

   <groupId>org.mybatis</groupId>

   <artifactId>mybatis</artifactId>

   <version>3.4.2</version>

</dependency>

<!-- mybatis-spring -->

<dependency>

   <groupId>org.mybatis</groupId>

   <artifactId>mybatis-spring</artifactId>

   version>1.3.2</version>

</dependency>