Mybatis를 이용하여 select, insert, update, delete 테스트 한다.

 

파일 구조 >

 

; Referenced Library 에 해당 라이브러리

; Mybatis 관련 jar 파일

 

 

 

(1) TestMain.java

package test.app;

 

import java.util.List;

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

import test.dao.MembersDao;
import test.vo.MembersVo;

 

public class TestMain {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("test/app/app.xml");
        MembersDao dao = (MembersDao)context.getBean("membersDao");

        int n = dao.insert(new MembersVo("my1","122","m","00",null));
        if(n>0){
            System.out.println("추가.성공!!");
        }

        n = dao.delete("my1");
        if(n>0){
            System.out.println("삭제성공!!");
        }

        MembersVo vo = dao.getInfo("my");
        if(vo!=null){
            System.out.println("아이디:" + vo.getId() );
            System.out.println("비밀번호:" + vo.getPwd() );
            System.out.println("이메일:" + vo.getEmail() );
            System.out.println("전화:" + vo.getPhone() );
        }else{
            System.out.println("검색된 아이디가 없어요!!");
        }
        System.out.println("---------------------------------------");
       
        List<MembersVo> list = dao.getList();
        for( MembersVo vo1: list){
            System.out.println("아이디:" + vo1.getId() );
            System.out.println("비밀번호:" + vo1.getPwd() );
            System.out.println("이메일:" + vo1.getEmail() );
            System.out.println("전화:" + vo1.getPhone() );
            System.out.println("=============");
        }
    }
}

 

 

스프링에서 MyBatis와 연동순서
1. DataSource설정(DB접속 정보)
2. SqlSessionFactory설정(dataSource주입,mapper파일에 대한 정보)
3. SqlSessionTemplate설정(SqlSessionFactory주입)
4. Dao설정(sqlSessionTemplate주입) 

 

 

(2) app.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">

    
    <!-- 1. DataSource설정(DB접속 정보) -->
    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
        <property name="username" value="scott" />
        <property name="password" value="tiger" />
    </bean>   
   
    <!--     2. SqlSessionFactory설정(dataSource주입,mapper파일에 대한 정보) -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- dataSource설정 -->
        <property name="dataSource" ref="dataSource"/>
        <!--
            SQLMapper파일 설정 : 클래스패스위치의 test/mybatis 경로의 모든xml파일을 읽어와라.!
         -->
        <property name="mapperLocations" value="classpath:test/mybatis/ *.xml"/>
    </bean>
   
    <!--     3. SqlSessionTemplate설정(SqlSessionFactory주입) -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!--  생성자 0번째 인자에 sqlSessionFactory를 넣어라 -->
        <constructor-arg ref="sqlSessionFactory" index="0"/>
    </bean>
   
    <!--     4. Dao설정(sqlSessionTemplate주입) -->
    <bean id="membersDao" class="test.dao.MembersDao">
        <property name="sqlSession" ref="sqlSession" />
    </bean>   
</beans>

 

 

 

스프링에서는 SqlSession을 사용하기 위한 공통작업을 템플릿화한 SqlSessionTemplate을 사용한다.
( SqlSession 오픈, 종료에 관련된 작업을 관리해줌 )

 


(3) MembersDao.java

;

package test.dao;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;

import test.vo.MembersVo;


public class MembersDao {
    private SqlSessionTemplate sqlSession;
    //스프링을 통해 주입받아야 하므로 setter메소드가 있어야 함.
    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }
    public int insert(MembersVo vo){
        int n = sqlSession.insert("insert", vo);
        return n;
    }
    public int delete(String id){
        return sqlSession.delete("delete", id);
    }
    public MembersVo getInfo(String id){
        return (MembersVo)sqlSession.selectOne("getInfo", id);
    }
    public List<MembersVo> getList(){
        return (List<MembersVo>)sqlSession.selectList("getList");
    }
}

 

 

 

MyBatis
(5) MembersMapper.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="orm.mybatis.MembersMapper">
    <insert id="insert" parameterType="test.vo.MembersVo">
        insert into Members values ( #{ id }, #{ pwd }, #{ email }, #{ phone }, sysdate )
    </insert>
    <select id="getList" resultType="test.vo.MembersVo">
        select * from members
    </select>
    <delete id="delete" parameterType="String">
        delete from members where id=#{value}
    </delete>
    <select id="getInfo" resultType="test.vo.MembersVo" parameterType="String">
        select * from members where id=#{value}
    </select>
</mapper>

 

 

(4) MembersVo.java

package test.vo;

import java.sql.Timestamp;


public class MembersVo {
    private String id;
    private String pwd;
    private String email;
    private String phone;
    private Timestamp regdate;
   
    public MembersVo(){}
   
    public MembersVo(String id, String pwd, String email, String phone, Timestamp regdate) {
        super();
        this.id = id;
        this.pwd = pwd;
        this.email = email;
        this.phone = phone;
        this.regdate = regdate;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Timestamp getRegdate() {
        return regdate;
    }

    public void setRegdate(Timestamp regdate) {
        this.regdate = regdate;
    }   
}

 

 

'WEB > Spring3.0' 카테고리의 다른 글

SPRING3.0 #10( MVC )  (0) 2013.01.27
SPRING3.0 #09( MVC )  (0) 2013.01.27
SPRING3.0 #07( jdbc )  (0) 2013.01.27
SPRING3.0 #06( annotation )  (0) 2013.01.27
SPRING3.0 #05( init-method, destroy-method, scope )  (0) 2013.01.27

 

 

예제 >  members 테이블에 간단히 데이터 조회, 입력, 수정, 삭제 하는 예제.

- DB : 오라클 11G XE

 

 

소스 구조 >>

 

- 관련 lib는 Spring User lib 만들어 이곳에 연결.

 

 

 

members테이블 테스트용으로 간단히 만든다.

 

 CREATE TABLE MEMBERS(
    ID VARCHAR2(10) PRIMARY KEY,
    PWD VARCHAR2(10),
    EMAIL VARCHAR2(15),
    PHONE VARCHAR2(20),
    REGDATE DATE);

 

 

 

(1)  TestMain.java

package test.app.main;

 

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

import test.dao.MembersDao;
import test.vo.MembersVo;

 

public class TestMain {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("test/app/app.xml");
        MembersDao dao = (MembersDao)context.getBean("membersDao");

        int n = dao.insert(new MembersVo("test3","test","test","test",null));
        if(n>0){
            System.out.println("회원추가 성공");
        }

        n= dao.delete("test3");
        if ( n > 0 ){
            System.out.println("회원삭제 성공");
        }

        n = dao.update(new MembersVo("test1","33","44","55",null));
        if(n>0){
            System.out.println("수정성공");
        }

        List<MembersVo> list = dao.getList();
        for(MembersVo vo:list){
            System.out.println("id:" + vo.getId());
            System.out.println("Pwd:" + vo.getPwd());
            System.out.println("Email:" + vo.getEmail());
        }
        System.out.println("-------------------------------------");

        System.out.println("[[  like 조회  ]]");
        list = dao.getList("mang");
        for(MembersVo vo:list){
            System.out.println("아이디:" + vo.getId());
            System.out.println("비밀번호:" + vo.getPwd());
            System.out.println("이메일:" + vo.getEmail());
            System.out.println("전화번호:" + vo.getPhone());
            System.out.println("등록일:" + vo.getRegdate());
        }
        System.out.println("-------------------------------------");

        System.out.println("[[   equal 조회    ]]");
        MembersVo vv = dao.getInfo("019");
        if(vv!=null){
            System.out.println("아이디:" + vv.getId());
            System.out.println("비밀번호:" + vv.getPwd());
            System.out.println("이메일:" + vv.getEmail());
            System.out.println("전화번호:" + vv.getPhone());
            System.out.println("등록일:" + vv.getRegdate());
        }       
    }   
}

 

 

 

[[ jdbc연동순서 ]]

 

1. DataSource 설정 ( DB연결 정보 )
2. JdbcTemplate설정 ( DataSource 주입 )
3. MembersDao 설정( JdbcTemplate주입 )

 

 

(2) app.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.xsd">


    <!--     1. DataSource 설정 ( DB연결 정보 )        -->
   <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
        <property name="username" value="scott"/>
        <property name="password" value="tiger"/>
    </bean>
   
    <!--     2. JdbcTemplate설정 ( DataSource 주입 )   -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
   
    <!--     3. MembersDao 설정( JdbcTemplate주입 )      -->
    <bean id="membersDao" class="test.app.dao.MembersDao">
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>
</beans>

 

; <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" ...

   --> tomcat-dbcp.jar

 

 

(3) MembersDao.java
; 스프링에서는 jdbc와 연동할때 정형화된 코드를 템플릿화해서 만든 jdbcTemplete을 사용한다.

 

package test.app.dao;

 

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import test.vo.MembersVo;


public class MembersDao {
    private JdbcTemplate jdbcTemplate;


    // 스프링이 생성해준 객체를 주입해야 하므로 setter메소드 작성.
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public int insert(MembersVo vo) {
        String sql = "insert into members values (?,?,?,?,sysdate)";
        // sql : 실행할 sql구문
        // parameter : ?에 대응되는 값들
        int n = jdbcTemplate.update(sql, vo.getId(), vo.getPwd(), vo.getEmail(), vo.getPhone());
        return n;
    }

    public int delete(String id) {
        String sql = "delete from members where id=?";
        int n = jdbcTemplate.update(sql, id);
        return n;
    }

    public int update(MembersVo vo) {
        String sql = "update members set pwd=?,email=?,phone=? where id=?";
        int n = jdbcTemplate.update(sql, vo.getPwd(), vo.getEmail(),
                vo.getPhone(), vo.getId());
        return n;
    }

    // 전체회원 정보 가져오는 메소드
    public List<MembersVo> getList() {
        String sql = "select * from members order by id";
        // annoynmouse 추상클래스 사용
        RowMapper<MembersVo> rowMapper = new RowMapper<MembersVo>() {
            @Override
            public MembersVo mapRow(ResultSet rs, int row) throws SQLException {
                MembersVo vo = new MembersVo();
                vo.setId(rs.getString("id"));
                vo.setPwd(rs.getString("pwd"));
                vo.setEmail(rs.getString("email"));
                vo.setPhone(rs.getString("phone"));
                vo.setRegdate(rs.getTimestamp("regdate"));
                return vo;
            }
        };
        List<MembersVo> list = jdbcTemplate.query(sql, rowMapper);
        return list;
    }

    public List<MembersVo> getList(String find) {
        String sql = "select * from members where email like '%'||?||'%'";

         // RowMapper<MembersVo> rowMapper = new RowMapper<MembersVo>() {
         //
         // @Override public MembersVo mapRow(ResultSet rs, int row) throws
         // SQLException { MembersVo vo = new MembersVo();
         // vo.setId(rs.getString("id")); vo.setPwd(rs.getString("pwd"));
         // vo.setEmail(rs.getString("email"));
         // vo.setPhone(rs.getString("phone"));
         // vo.setRegdate(rs.getTimestamp("regdate")); return vo; } };

        Object obj[] = { find };
        List<MembersVo> list = jdbcTemplate.query(sql, obj, // new
                                                            // Object[]{find}
                new RowMapper<MembersVo>() {
                    @Override
                    public MembersVo mapRow(ResultSet rs, int row)
                            throws SQLException {
                        MembersVo vo = new MembersVo();
                        vo.setId(rs.getString("id"));
                        vo.setPwd(rs.getString("pwd"));
                        vo.setEmail(rs.getString("email"));
                        vo.setPhone(rs.getString("phone"));
                        vo.setRegdate(rs.getTimestamp("regdate"));
                        return vo;
                    }
                });
        return list;
    }

    public MembersVo getInfo(String id) {
        String sql = "select * from members where id=?";
        try {
            MembersVo vo = jdbcTemplate.queryForObject(sql,
                    new Object[] { id }, new RowMapper<MembersVo>() {
                        @Override
                        public MembersVo mapRow(ResultSet rs, int row)
                                throws SQLException {

                            MembersVo vo = new MembersVo();
                            vo.setId(rs.getString("id"));
                            vo.setPwd(rs.getString("pwd"));
                            vo.setEmail(rs.getString("email"));
                            vo.setPhone(rs.getString("phone"));
                            vo.setRegdate(rs.getTimestamp("regdate"));
                            return vo;
                        }
                    });
            return vo;
        } catch (EmptyResultDataAccessException es) {//검색된 데이터가 없으면 예외.
            System.out.println(es.getMessage());
            return null;
        }
    }
}

 

 

(4) MembersVo.java

package test.app.vo;

 

import java.sql.Timestamp;

public class MembersVo {
    private String id;
    private String pwd;
    private String email;
    private String phone;
    private Timestamp regdate;
   
    public MembersVo(){}
   
    public MembersVo(String id, String pwd, String email, String phone, Timestamp regdate) {
        super();
        this.id = id;
        this.pwd = pwd;
        this.email = email;
        this.phone = phone;
        this.regdate = regdate;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public Timestamp getRegdate() {
        return regdate;
    }
    public void setRegdate(Timestamp regdate) {
        this.regdate = regdate;
    }
}

 

 

'WEB > Spring3.0' 카테고리의 다른 글

SPRING3.0 #09( MVC )  (0) 2013.01.27
SPRING3.0 #08( Mybatis )  (0) 2013.01.27
SPRING3.0 #06( annotation )  (0) 2013.01.27
SPRING3.0 #05( init-method, destroy-method, scope )  (0) 2013.01.27
SPRING3.0 #04( 의존관계 )  (0) 2013.01.27

 


(1) TestMain.java
(2) MemberController.java
(3) MemberDao.java
(4) test06.xml

 

 

 


(1) TestMain.java

package test.di6_annotation;

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

public class TestMain {
    public static void main(String[] args) {
        ApplicationContext context 

                          = new ClassPathXmlApplicationContext("test/di6_annotation/test06.xml");
        MemberController mc = (MemberController)context.getBean("memberController");
        mc.execute();
    }
}

 


(2) MemberController.java
;

@Autowired : 같은 타입의 객체를 찾아 자동주입
 - 세군데에 적용할수 있다. --> 생성자, 멤버필드, setter메소드

 


package test.di6_annotation;

import org.springframework.beans.factory.annotation.Autowired;

public class MemberController {
    //MemberDao타입의 객체가 자동주입된다.(타입,이름순으로 검색됨)
    @Autowired  private MemberDao memberDao;
//    public void setMemberDao(MemberDao memberDao) {
//        this.memberDao = memberDao;
//    }
    public void execute(){
        memberDao.insert("홍씨");
    }
}



(4) test06.xml

; <context:annotation-config/>을 선언하면 멤버변수에 대해 setter 메소드를 사용안해도 됨.

; 멤버변수에 @Autowired를 선언.

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns="http://www.springframework.org/schema/beans"
    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-3.1.xsd">

    <!-- Annotation이 적용되도록 설정 -->

    <context:annotation-config/>

    <bean id="memberDao" class="test.di6_annotation.MemberDao" />
    <bean id="memberController" class="test.di6_annotation.MemberController"/>
</beans>

 

 

(3) MemberDao.java

package test.di6_annotation;

public class MemberDao {
    private String url;
   
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUrl() {
        return url;
    }
    public void insert(String id){
        System.out.println(id + "님을 추가했습니다.");
    }
    public void update(String id){
        System.out.println(id + "님을 수정했습니다.");
    }
    public void delete(String id){
        System.out.println(id + "님을 삭제했습니다.");
    }
    public void getinfo(String id){
        System.out.println(id + "님을 조회했습니다.");
    }
}

 

 

'WEB > Spring3.0' 카테고리의 다른 글

SPRING3.0 #08( Mybatis )  (0) 2013.01.27
SPRING3.0 #07( jdbc )  (0) 2013.01.27
SPRING3.0 #05( init-method, destroy-method, scope )  (0) 2013.01.27
SPRING3.0 #04( 의존관계 )  (0) 2013.01.27
SPRING3.0 #03( DI의 시작이랄까.. )  (0) 2013.01.27

 

 

spring은 기본이 singleton방식이다.

 

singleton이 아닌 새로 생성해 사용하는 방법에 대한 예제 >

 

(1) TestMain
(2) Members.java
(3) MemberDao.java
(4) test05.xml

 

(1) TestMain

package test.di5;

 

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

 

 

public class TestMain {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("test/di5/test05.xml");
        MemberDao dao = (MemberDao)context.getBean("memberDao");
        dao.insert("홍씨");
        System.out.println("dao:" + dao);
       
        MemberDao dao2 = (MemberDao)context.getBean("memberDao");
        dao2.insert("홍씨");
        System.out.println("dao2:" + dao2);
       
        Members mm = (Members)context.getBean("members");
        mm.print();
    }
}

 

 

  

 

[[ scope ]]
- 기본값으로 singleton이 설정되어 있음.
- prototype : 객체를 요청할때마다 생성한다.
- request : 클라이언트가 요청할때마다 생성(web app에서만 사용가능)
- session : 세션에서만 유효함.(web app에서만 사용가능)
- singleton : 객체를 싱글톤패턴으로 생성(하나만 생성)

; [[ init-method ]] : 객체 생성 시 자동호출됨( 객체 초기화 작업 )

; [[ destroy-method ]] : 객체 소멸시 자동호출됨(객체의 자원해제 등 ..)

 

(4) test05.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">


    <bean id="memberDao" class="test.di5.MemberDao" scope="prototype"
        init-method="init" destroy-method="destroy">
        <property name="url" value="localhost" />
    </bean>

    <bean id="mem" class="java.lang.String">
        <constructor-arg value="김모씨" />
    </bean>
    <bean id="members" class="test.di5.Members">
        <!-- java.util.list의 타입의 파라미터값 넣기 -->
        <property name="list">
            <list>
                <value>홍길동</value>
                <value>홍길서</value>
                <value>홍길남</value>
                <value>홍길북</value>
               <ref bean="mem"/>
            </list>
        </property>
    </bean>
</beans>

 


(2) Members.java

package test.di5;

import java.util.List;

public class Members {
    private List<String> list;
    public void setList(List<String> list) {
        this.list = list;
    }
    public void print(){
        for(String str:list){
            System.out.println(str);
        }
    }
}

 

(3) MemberDao.java

package test.di5;

public class MemberDao {
    private String url;
   
    public void init(){
        System.out.println("[init메소드 호출] dao객체가 초기화되었습니다.!");
    }
    public void destroy(){
        System.out.println("[destroy메소드 호출]dao객체가 소멸되었습니다.!");
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUrl() {
        return url;
    }
    public void insert(String id){
        System.out.println(id + "님을 추가했습니다.");
    }
    public void update(String id){
        System.out.println(id + "님을 수정했습니다.");
    }
    public void delete(String id){
        System.out.println(id + "님을 삭제했습니다.");
    }
    public void getinfo(String id){
        System.out.println(id + "님을 조회했습니다.");
    }
}




'WEB > Spring3.0' 카테고리의 다른 글

SPRING3.0 #07( jdbc )  (0) 2013.01.27
SPRING3.0 #06( annotation )  (0) 2013.01.27
SPRING3.0 #04( 의존관계 )  (0) 2013.01.27
SPRING3.0 #03( DI의 시작이랄까.. )  (0) 2013.01.27
SPRING3.0 #02( new사용과 spring bean사용하기. )  (0) 2013.01.27

 

예제>

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