※ MyBatis의 자료형 매핑

number – Integer, Double, Float, Byte, Short, Long, BigDecimal

char, varchar2, clob – String

date – java.sql.Date, java.util.Date

time – java.sql.Time, java.util.Date 

timestamp – java.sql.Timestamp

blob – byte []



1. 의존성 설정 


<repositories>

<repository>

<id>codelds</id>

<url>https://code.lds.org/nexus/content/groups/main-repo</url>

</repository>

</repositories>


<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc6</artifactId>

<version>11.2.0.3</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>${spring-framework.version}</version>

</dependency>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.4.6</version>

</dependency>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>1.3.2</version>

</dependency>





2. mapper 


<?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=“매퍼이름">

<select id="호출할 이름 " resultType="결과 자료형“ 또는 parameterType=“자료형” >

    select 구문

  </select>

<insert id="호출할 이름" parameterType="매개변수 자료형">

INSERT INTO

AddressBook

VALUES (#{프로퍼티이름 또는 키이름})

</insert>

</mapper>



파라미터 설정 - #{이름}

MyBatis는 기본적으로 PreparedStatement 클래스를 이용해서 SQL을 작성하고 실행

파라미터를 ? 대신에 #{이름}으로 작성

파라미터가 1개인 경우는 wrapper 클래스나 String, Date 클래스로 parameterType을 설정하고 이름은 아무것이나 입력해도 됩니다.

파라미터가 여러 개 인 경우는 parameterType을 DTO 나 Map으로 설정

DTO 클래스를 설정한 경우는 프로퍼티(접근자 메소드 – getter) 이름으로 파라미터 이름을 설정해야 합니다.

Map으로 parameterType을 설정한 경우는 키의 이름을 설정해야 합니다.



SqlSessionTemplate 클래스는 SqlSession 클래스를 상속받았기 때문에 SqlSession의 메소드를 그대로 이용하면 됩니다.

sqlSession.insert, delete, update, selectOne, selectList(매퍼이름.id, 매개변수)를 호출하면 됩니다.

매퍼 파일의 sql 구문이 parameter를 받지 않는 경우라면 매개변수는 생략하고 호출이 가능

insert와 delete, update는 영향 받은 행의 개수를 정수로 리턴

selectOne은 설정한 resultType 객체를 리턴

selectList는 설정한 resultType의 List로 리턴

selectOne 메소드는 결과가 2개 이상 나오면 예외를 발생

Map으로 select 구문의 결과를 받는 경우 컬럼 이름이 키가 되고 데이터가 값

오라클의 데이터의 타입이 Number이면 Map에서는 BigDecimal로 저장

Map으로 select 구문의 결과를 받는 경우 키의 이름은 오라클은 모두 대문자 MySQL은 소문자로 저장



3.mybatis 패키지 경로 설정 


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

<typeAliases>

<package name="com.tistory.tstigma"/>

</typeAliases>

</configuration>





4. applicationContext.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"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">


<!-- 어노테이션을 사용할 수 있도록하는 설정  -->


<context:annotation-config/>

<context:component-scan base-package="transaction"></context:component-scan>



<!-- DataSource 빈 설정 -->

<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">

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

<property value="jdbc:oracle:thin:@192.168.0.200:1521:xe" name="url" />

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

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

</bean>

<!-- SqlSessionFactoryBean : MyBatis 설정 정보 -->

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

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

<!--db 내용을 good.xml에 저장 -->

<property value="classpath:mybatis/mappers/good.xml" name="mapperLocations" />

<property value="classpath:mybatis/mybatis-config.xml" name="configLocation" />

</bean>

<!-- 붙었다 떨어졌다는 여기서하고 위에서는 설정 정보만 가지고 잇습니다.  -->

<!-- SqlSessionTemplate: Mybatis 사용 객체  -->

<bean class="org.mybatis.spring.SqlSessionTemplate" id="sqlSession" destroy-method="clearCache">

<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />

</bean>

<!-- MyBatis에 트랜잭션을 적용하기 위한 객체  -->

<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

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

</bean>

<tx:annotation-driven transaction-manager="transactionManager"/> 

</beans>



+ Recent posts