앞장에 이어서 테스트 class를 작성해보았습니다. 일단 이클립스에서 

Class 파일로 TestController를 먼저 만들고 아래와 같이 소스코드를 

입력했습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
@Controller
public class TestController {
 
    @Resource(name="testservice")
    private TestService testservice;
    
    @RequestMapping(value = "/")
    public void home() {    
        String text = testservice.getTestSql();
        System.out.println("result: "+ text);
    }
    
}





여기까지 입력하면 이클립스에서 에러가 출력, Create Interface 간편

하게 인터페이스를 생성해주고 해당 내용을 작성합니다.


1
2
3
4
5
public interface TestService {

    String getTestSql();
}





이제 비즈니스 로직을 입력해줄 Class를 생성해줄건데요, 이는 

ServiceImpl이라고 명명하겠습니다. 그리고 Impl Class는 Interface

TestService를 implements하여 부모의 메소드를 재정의 해줍니다.


1
2
3
4
5
6
7
8
9
10
11
@Service(value="testservice")
public class TestServiceImpl implements TestService{
 
    @Resource(name="testDAO")
    private TestDAO testDAO;
    
    public String getTestSql(){
        return testDAO.getTestSql();
    }        
    
}





다음으로 DAO Class를 작성하여 data access method를 작성합니다.

DAO는 AbstractDAO를 상속 받아 1장에서 작성한 XML 파일에서 

데이터베이스에 액세스하여 쿼리 결과를 출력합니다.


TestDAO ▼

1
2
3
4
5
6
7
8
@Repository(value="testDAO")
public class TestDAO extends AbstractDAO{
 
    public String getTestSql() {
        return (String) selectOne("getTestSql");
    }
 
}



AbstractDAO ▼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class AbstractDAO {
    
    protected Log log = LogFactory.getLog(AbstractDAO.class);
    
    @Autowired
    public SqlSessionTemplate sqlSession;
    
    protected void printQueryId(String queryId) {
        if(log.isDebugEnabled()){
            log.debug("\t QueryId  \t:  " + queryId);
        }
    }
     
    public Object insert(String queryId, Object params){
        printQueryId(queryId);
        return sqlSession.insert(queryId, params);
    }
     
    public Object update(String queryId, Object params){
        printQueryId(queryId);
        return sqlSession.update(queryId, params);
    }
     
    public Object delete(String queryId, Object params){
        printQueryId(queryId);
        return sqlSession.delete(queryId, params);
    }
     
    public Object selectOne(String queryId){
        printQueryId(queryId);
        return sqlSession.selectOne(queryId);
    }
     
    public Object selectOne(String queryId, Object params){
        printQueryId(queryId);
        return sqlSession.selectOne(queryId, params);
    }
     
    @SuppressWarnings("rawtypes")
    public List selectList(String queryId){
        printQueryId(queryId);
        return sqlSession.selectList(queryId);
    }
     
    @SuppressWarnings("rawtypes")
    public List selectList(String queryId, Object params){
        printQueryId(queryId);
        return sqlSession.selectList(queryId,params);
    }
    
}




여기까지 진행하고 톰캣을 재기동하면 result: OK 라는 메시지가 이클립스

Console에 출력됩니다. 





  마이바티스란(Mybatis) ?


마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크입니다. 마이바티스는 JDBC로 처리하는 상당 부분의 코드와 파라미터 설정및 결과 매핑을 대신해주고, 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 어노테이션을 사용할 수 있게 해줍니다.


상기 내용은 Mybatis 홈페이지에서 긁어온 내용인데 이해하기가 어렵습니다. 간단하게 요약하면 객체지향 어플리케이션에서 관계형 데이터베이스의 연결을 쉽고 간결하게 처리하여 개발할 수 있도록 도와주는 프레임워크라고 말할 수 있겠네요.


이는 복잡한 JDBC 연결 코드를 걷어내어 생산성을 향상시켜주고, SQL과 어플리케이션 소스를 분리 시켜 유지보수성을 향상시켜줍니다. 엄청난 장점들이네요.^^


 


  마이바티스(Mybatis) 연동


필요 dependency는

1. Mybatis 라이브러리
2. Mybatis-Spring : Mybatis 와 Spring Framework 연동해주는 라이브러리
3. commons-dbcp : 자카르타 라이브러리로 Db컨넥션 풀을 관리해주는 라이브러리
4. ojdbc : 오라클 db 연동해주는 라이브러리
5. spring-jdbc : spring에서 db 컨넥션사용하기 위한 라이브러리


먼저 호환 가능한 버전을 확인해주고


MyBatis-Spring MyBatis Spring
1.0.0 and 1.0.1 3.0.1 to 3.0.5 3.0.0 or higher
1.0.2 3.0.6 3.0.0 or higher
1.1.0 or higher 3.1.0 or higher 3.0.0 or higher
1.3.0 or higher 3.4.0 or higher

3.0.0 or higher

1. pom.xml 해당 dependency를 추가합니다.


1. Mybatis

<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency>

 

2. Mybatis-Spring

<dependency>

    <groupId>org.mybatis</groupId>

    <artifactId>mybatis-spring</artifactId>

    <version>1.3.0</version>

</dependency>


3. MySQL connector-java

<dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>5.1.40</version>

</dependency>


4. commons-dbcp

<dependency>

    <groupId>commons-dbcp</groupId>

    <artifactId>commons-dbcp</artifactId>

    <version>1.4</version>

</dependency>


5. spring-jdbc

<dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-jdbc</artifactId>

   <version>${org.springframework-version}</version>

</dependency>



2. web.xml에 추가.


<web-app> 태그 안에 해당 소스를 추가합니다.


<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>

        classpath:config/mappers/*-context.xml

    </param-value>   

</context-param>



3. mapper.xml 추가


src/main/resources에 config > mappers 디렉토리를 만들고 mappers 폴더에 

mapper-context.xml, db-context.xml, test_SQL.xml 을 생성해줍니다.


mapper-context.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"

    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.xsd">

    

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

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

<property name="mapperLocations" value="classpath*:/config/mappers/**/*_SQL.xml" />  

</bean>

     

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

<constructor-arg index="0" ref="sqlSessionFactory" />

</bean>

</beans>


db-context.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"

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

                        http://www.springframework.org/schema/jdbc  http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd">

     

<!-- MySQL 연결 -->

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>

        <property name="url" value="jdbc:mysql://주소/스키마"/>

        <property name="username" value="계정"/>

        <property name="password" value="비밀번호"/>

    </bean>

</beans>


test_SQL.xml


<?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.test.tester.seviceimpl.TestDAO">


<select id="testSql" parameterType="string" resultType="string">

select 'OK' as Mybatis_Test from dual

</select>


</mapper>


여기까지 추가하셨다면 기본적인 준비는 끝났습니다.

다음 장에서는 Controller에서 쿼리를 찍어보도록 하겠습니다.