예제>

jdbc를 사용하는 방식에서 Mybatis로 변경하는 경우
 --> 의존관계 결합도가 강한것일수록 수정의 범위가 크다.
 --> spring인 경우 수정의 범위는 ?

 --> JdbcDao를 사용하다 MybatisDao로 변경할 경우 spring이 아닌경우는 수정이 불가피하나 spring인 경우는 xml만 변경하면 된다.

 

 

(1) TestMain.java
(2) InsertAction.java
(3) UpdateAction.java
(4) JdbcDao.java
(5) MybatisDao.java
(6) CommonDao.java

 

 

(1) TestMain.java

; InsertAction, UpdateAction  메소드 호출.

package test.di3;

public class TestMain {
    public static void main(String[] args) {
        InsertAction insert = new InsertAction();
        insert.execute("hong jil dong");
       
        UpdateAction update = new UpdateAction();
        update.execute("kim jil dong");
    }
}

 

(2) InsertAction.java
; JdbcDao의 insert()사용.

package test.di3;

public class InsertAction {
    private JdbcDao dao;
   
    public void execute(String name){
        dao = new JdbcDao();
        dao.insert(name);
    }
}

 

(3) UpdateAction.java
; JdbcDao의 update()사용.

package test.di3;

public class UpdateAction {
    private JdbcDao dao;  
    public void execute(String name){
        dao = new JdbcDao();                
        dao.update(name);
    }
}

 

(4) JdbcDao.java

;

package test.di3;

public class JdbcDao implements CommonDao{
    public void insert(String name){
        System.out.println("JDBC를 사용해서 " + name + " 추가");
    }
    public void delete(String name){
        System.out.println("JDBC를 사용해서 " + name + " 삭제");

    }
    public void update(String name){
        System.out.println("JDBC를 사용해서 " + name + " 수정");
    }
    public void select(String name){
        System.out.println("JDBC를 사용해서 " + name + " 조회");
    }
}

 

 


- JdbcDao를 사용하다가 MybatisDao로 변경하는 경우.
CommonDao 인터페이스를 만들고 MybatisDao에서 구현하는 방식으로 변경.
( JdbcDao의 메소드와 동일하게 구현해야 하기 때문에 추상클래스로 )

InsertAction, UpdateAction 변경.

 

(6) CommonDao.java

package test.di3;

// DAO가 가져야 할 기능들의 목록을 제시
public interface CommonDao {
    public void insert(String name);
    public void update(String name);
    public void delete(String name);
    public void select(String name);
}

 

(5) MybatisDao.java

package test.di3;

public class MybatisDao implements CommonDao{

    @Override
    public void insert(String name) {
        System.out.println("Mybatis를 사용해서 " + name + " 추가");
    }

    @Override
    public void update(String name) {
        System.out.println("Mybatis를 사용해서 " + name + " 수정");
    }

    @Override
    public void delete(String name) {
        System.out.println("Mybatis를 사용해서 " + name + " 삭제");
    }

    @Override
    public void select(String name) {
        System.out.println("Mybatis를 사용해서 " + name + " 조회");
    }   
}

 

(2) InsertAction.java

package test.di3;

public class InsertAction {
    //private JdbcDao dao;
    private CommonDao dao;
   
    public void execute(String name){
        //dao = new JdbcDao();
        dao = new MybatisDao();
        dao.insert(name);
    }
}

 

(3) UpdateAction.java

package test.di3;

public class UpdateAction {
    //private JdbcDao dao;
    private MybatisDao dao;
   
    public void execute(String name){
        //dao = new JdbcDao();
        dao = new MybatisDao();
               
        dao.update(name);
    }
}

;  MybatisDao 로 수정이 불가피하다.

 

 


 

 

SPRING식으로 개발하면

(1) TestMain.java
(2) InsertAction.java
(3) UpdateAction.java
(4) JdbcDao.java
(5) MybatisDao.java
(6) CommonDao.java
(7) test04.xml

 

(1) TestMain.java

package test.di4;

 

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

 

 

public class TestMain {
    public static void main(String[] args) {
        String res = "test/di4/test04.xml";
        ApplicationContext context = new ClassPathXmlApplicationContext(res);
        InsertAction insert = (InsertAction)context.getBean("insert");
        insert.execute("홍길동");
        UpdateAction update = (UpdateAction)context.getBean("update");
        update.execute("김길동");
    }
}

 


(2) InsertAction.java

package test.di4;

 

public class InsertAction {
    private CommonDao dao;
    public void setDao(CommonDao dao) {
        this.dao = dao;
    }
    public void execute(String name){
        dao.insert(name);
    }
}

 

 

(3) UpdateAction.java

package test.di4;

 

public class UpdateAction {
    private CommonDao dao;
   
    public void setDao(CommonDao dao) {
        this.dao = dao;
    }   
    public void execute(String name){   
        dao.update(name);
    }
}


(6) CommonDao.java

package test.di4;

 

// DAO가 가져야 할 기능들의 목록을 제시
public interface CommonDao {
    public void insert(String name);
    public void update(String name);
    public void delete(String name);
    public void select(String name);
}

 

(4) JdbcDao.java

package test.di4;

public class JdbcDao implements CommonDao{
    public void insert(String name){
        System.out.println("JDBC를 사용해서 " + name + " 추가");
    }
    public void delete(String name){
        System.out.println("JDBC를 사용해서 " + name + " 삭제");
    }
    public void update(String name){
        System.out.println("JDBC를 사용해서 " + name + " 수정");
    }
    public void select(String name){
        System.out.println("JDBC를 사용해서 " + name + " 조회");
    }
}


(5) MybatisDao.java
; JDBC에서 Mybatis로 변경하는 경우.

package test.di4;

public class MybatisDao implements CommonDao{
    @Override
    public void insert(String name) {
        System.out.println("Mybatis를 사용해서 " + name + " 추가");
    }
    @Override
    public void update(String name) {
        System.out.println("Mybatis를 사용해서 " + name + " 수정");
    }
    @Override
    public void delete(String name) {
        System.out.println("Mybatis를 사용해서 " + name + " 삭제");
    }
    @Override
    public void select(String name) {
        System.out.println("Mybatis를 사용해서 " + name + " 조회");
    }   
}

 

 

(7) test04.xml

; <bean id="dao" class="test.di4.JdbcDao"/> 에서
    <bean id="dao" class="test.di4.MybatisDao"/> 로 변경하면 수정 끝이다.
; 의존성이 낮을 수록 수정이 적고, 유지보수가 용이하단다.

; namespace에서 p 속성 선택하면 <property> 을 p로 줄여쓸수 있다.

    <bean id="insert" class="test.di4.InsertAction" >
        <property name="dao" ref="dao"/>
    </bean>

<bean id="insert" class="test.di4.InsertAction" p:dao-ref="dao"/>

 

<?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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

   <bean id="dao" class="test.di4.MybatisDao"/>
    <!-- <bean id="insert" class="test.di4.InsertAction" >
        <property name="dao" ref="dao"/>
    </bean>
    <bean id="update" class="test.di4.UpdateAction">
        <property name="dao" ref="dao"/>
    </bean> -->
    <bean id="insert" class="test.di4.InsertAction" p:dao-ref="dao"/>
    <bean id="update" class="test.di4.UpdateAction" p:dao-ref="dao"/>
</beans>




+ Recent posts