스프링(3.0) MyBatis 연결
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> |