예제>
jdbc를 사용하는 방식에서 Mybatis로 변경하는 경우
--> 의존관계 결합도가 강한것일수록 수정의 범위가 크다.
--> spring인 경우 수정의 범위는 ?
--> JdbcDao를 사용하다 MybatisDao로 변경할 경우 spring이 아닌경우는 수정이 불가피하나 spring인 경우는 xml만 변경하면 된다.
(2) InsertAction.java
(3) UpdateAction.java
(4) JdbcDao.java
(5) MybatisDao.java
(6) CommonDao.java
(1) TestMain.java
; InsertAction, UpdateAction 메소드 호출.
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()사용.
public class InsertAction {
private JdbcDao dao;
public void execute(String name){
dao = new JdbcDao();
dao.insert(name);
}
}
(3) UpdateAction.java
; JdbcDao의 update()사용.
public class UpdateAction {
private JdbcDao dao;
public void execute(String name){
dao = new JdbcDao();
dao.update(name);
}
}
(4) JdbcDao.java
;
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
// 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
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
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
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
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
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
// 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
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로 변경하는 경우.
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로 줄여쓸수 있다.
<property name="dao" ref="dao"/>
</bean>
을
로
<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>
'WEB > Spring3.0' 카테고리의 다른 글
SPRING3.0 #06( annotation ) (0) | 2013.01.27 |
---|---|
SPRING3.0 #05( init-method, destroy-method, scope ) (0) | 2013.01.27 |
SPRING3.0 #03( DI의 시작이랄까.. ) (0) | 2013.01.27 |
SPRING3.0 #02( new사용과 spring bean사용하기. ) (0) | 2013.01.27 |
SPRING3.0 #01( Mybatis와 SPRING 관련 LIB ) (0) | 2013.01.27 |