ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 010. 마이바티스(mybatis) 프레임워크 개요
    SsY/Class 2023. 7. 17. 10:33
    728x90
    Mybatis Framework 개요
    ■■■ 마이바티스(Mybatis ((구)ibatis)) Framework ■■■
    
    ※ ORM(Object Relational Mapping : 객체 관계 매핑)
       ORM 은 데이터베이스의 테이블들을 객체화하여 접근할 수 있으며, 
       PreparedStatement 의 파라미터와 ResultSet 의 값들을
       자바 빈과 객체화가 쉬운 매핑을 시켜주어 자바코드의 감소에 도움을 주는 것으로, 
       오픈 소스로는 mybatis, hibernate 등이 있다.
       //-- hibernate : 실무에서 잘 안씀. 프레임워크.
       //--             스스로 SQL 구문 자동 생성 
       //--             -> 다만 논리적인 쿼리문을 구성하려면 작업지시서를 다 써줘야 함
       //--             -> 그냥 내가 SQL 구문 써두는게 더 나을 수도...!... 
        
    ※ SQL Mapper
       - 자바 객체를 실제 SQL 문장에 매핑(자바 코드에서 SQL 관련 부분을 제거)
         //-- 나누고, 분리하고 , 쪼개는 것이 트렌드 임
       - SQL 문장이 자동으로 생성되는 것이 아니라 개발자가 기술해준다.
       - 매핑 자페는 데이터베이스의 엔티티와 관계에 독립적이다.
         (mapping 자체가 SQL 문에 국한)
       - 실제적으로 모든 임베디드 SQL 시스템은 모두 SQL Maper 로 간주 가능
       - 마이바티스(mybatis) SQL Map 의 경우
         XML 에 임베디드 된 SQL (자바 코드의 SQL 을 XML 파일로 분리)
         
    ○ 마이바티스(mybatis) 개요
       //-- 데이터를 보내는것만이 아닌 DB 에 저장하고 유지하는 것이기 때문에 영속적
       
       mybatis 는 persistence(영속적인, 소멸되지 않고 오래도록 지속되는) 계층의
       프레임워크로 다른 객체 관계 매핑 프레임워크들과는 달리
       정형화된 테이블 구조에 의존하지 않고
       SQL 구문의 실행 결과에 객체를 매핑하는 방식으로
       테이블 구조가 복잡해지고 정규화가 되어있지 않더라도 테이블을 변경할 필요 없이
       기존 개발 방법에서 사용한 SQL 을 그대로 사용할 수 있으며,
       SQL 에 적용한 각각의 튜닝 항목들도 모두 그대로 유지 된다.
       
       mybatis 프로젝트는 mybatis SQL Map 과 mybatis DAO 컴포넌트로 구성되어 있다.
       이 중, mybatis SQL Map 은 SQL 문 관리에 초점을 맞추고 있다.
       mybatis DAO 컴포넌트는 hibernate 와 mybatis SQL Map 을 함께 사용할 경우
       트랜젝션 통합과 같은 저장 메커니즘에 초점을 맞추고 있다
       
       mybatis Data Mapper 프레임워크는 관계형 데이터베이스에 접근할 때
       필요한 자바 코드를 현저하게 줄일 수 있는데,
       간단한 XML 서술자를 사용해서 편리하게 자바 빈즈를 SQL Statement 에 매핑시킨다.
       간단한(Simplicity)이란 다른 프레임워크와 객체 관계 매핑 도구와 비교하여 mybatis 의 가장 큰 장점이다.
       mybatis Data Mapper 를 사용하기 위해서 자바 빈즈와 XML 그리고 SQL 에 대한 선수지식이 필요하며
       Data Mapper 를 사용하면 실제 SQL 문의 모든 기능을 사용할 수 있다.
       
       객체 관계형 데이터베이스의 관계 매핑을 설정하면
       SQL 문을 자동으로 생성해주는 hibernate 에 비해 SQL 문 자동 생성기능이 없는
       mybatis 의 SQL Mapper 는 진정한 의미의 ORM 이 아니다 라는 분위기도 있었지만
       관계형 데이터베이스와 통신할 수 있는 유일한 매개체인 SQL 문과 객체를
       매핑시켜준다는 의미에서 SQL Mapper 또한 ORM 으로 다루고 있다.
       
    ○ 마이바티스(mybatis)의 특징
    
       - **프레임워크(환경,틀,약속)**
        ·mybatis 는 JDBC 프레임워크다.    
        ·개발자는 SQL 을 작성하기로 약속하고,
          마이바티스는 JDBC 를 사용해서 이를 실행하기로 약속한다
       
       - 간단함
        ·간단한 퍼시스턴스 프레임워크    
        ·JDBC 를 사용할 때의 try / catch / finally 구문을 사용할 필요가 없다.
       
       - 생산성
        ·JDBC와 비교했을 때 62% 정도 줄어드는 코드와 간단한 설정
          (근거 : 이탈리안 자바 사용자 그룹의 연구 결과)    
    
       - 성능
        ·구조적 강점(데이터 접근 속도를 높여주는 join 매핑) 
        ·여러가지 방식의 데이터 가져오기 전략(가져오기 미루기, SQL 줄이기 기법 등)
       
       //-- aspect? AOP 의 관점==관심사 에서 등장
       - 관심사의 분리
        ·설계를 향상(차후 유지 보수성을 위해)
        ·리소스를 관리하여 계층화를 지원(Connection, PreparedStatement, ResultSet)
        
       - SQL 문이 애플리케이션 소스 코드로부터 완전히 분리
       
       - 작업의 분배 : 팀을 세분화하여 업무 구분을 명확히 하는 것을 도움
       
       - 이식성 : 어떤 프로그래밍 언어로도 구현 가능(JAVA, C#, RUBY 등)
       
       - 오픈소스 : 무료 + 커뮤니티
       
       - **SQL Mapper**
        ·기본적으로 ORM 은 데이터베이스 객체를 자바 객체로 매핑함으로써
          객체간의 관계를 바탕으로 SQL 을 자동으로 생성해주지만, 
          마이바티스는 SQL 을 작성 및 명시해 주어야 한다.
          
       - 스프링과 같은 외부 트랜젝션 관리자를 사용할 수도 있다.
       
       - 스프링 연동 모듈을 제공하기 때문에 스프링과 연동할 수도 있다.
       
    ○ 마이바티스(mybatis) 작동원리
    
       Data Mapper 는 자바 빈즈, Map 구현, 원시 래퍼 타입(String, Integer, ...)
       그리고 SQL 문을 위해 XML 문서를 매핑하기 위한 XML 서술자를 사용하는 간단한 프레임워크를 제공한다.
       
       1) 파라미터(자바 빈즈, Map 또는 원시 래퍼)로써 객체를 제공한다.
          파라미터 객체는 update 문 내부에 입력 값을 세팅하기 위해 사용되거나
          쿼리문의 where 절을 세팅하기 위해 사용된다.
          
       2) 매핑된 statement 를 실행한다.
          Data Mapper 프레임워크는 PreparedStatement 인스턴스를 생성하고
          제공된 파라미터 객체를 사용해서 파라미터를 세팅한다.
          그리고 statement 를 실행하고 ResultSet 으로부터 결과 객체를 생성한다.
       
       3) update 의 경우에 영향을 미친 rows 의 숫자를 반환한다.
          조회문일 경우에 한 개(single) 의 객체 또는 컬렉션 객체를 반환한다.
          파라미터처럼 결과 객체는 자바 빈즈, Map, 원시 래퍼, XML 이 될 수 있다.
          
    ○ 마이바티스(mybatis) 작동 흐름
    
       - 데이터 처리를 위해 DAO 는 mybatis 에 제공하는 객체의 메소드를 호출한다.
       - mybatis 는 SQL 문이 저장된 매퍼 파일에서 데이터 처리에 필요한 SQL 문을 찾는다.
       - mybatis 는 매퍼 파일에서 찾는 SQL 을 서버로 보내고자 JDBC 드라이버를 사용한다.
       - JDBC 드라이버는 SQL 문을 데이터베이스 서버로 전송한다.
       - mybatis 는 select 문의 실행 결과를 값 객체에 담아서 반환한다.
         (insert, update, delete 문인 경우 입력, 변경, 삭제된 레코드의 갯수를 반환한다.)
         
    ○ 마이바티스(mybatis) 관련 사이트
    
       - ibatis 이전 홈페이지
         http://ibatis.apache.org/
         
       - mybatis 새 홈페이지
         http://mybatis.apache.org/ 
         
       - 다운로드
        ·mybatis
          http://blog.mybatis.org/p/products/html    
        ·spring 연동
          http://github.com/mybatis/spring/releases
       
       - 도움말
         http://mybatis.github.io/mybatis-3/ko/getting-started.html
         
       - API 
         http://ibatis.apache.org/docs/java/dev/
         
    ※ 참고
       - 2.3.0.677 버전부터는 jar 파일들(/lib 디렉터리 내)이
         ibatis-2.3.0.677.jar 하나로 통합되었다.   
       - ibatis-common-2.jar
         : SQL Maps 와 DAO 프레임워크 모두가 사용하는 공통 컴포넌트 포함.    
       - ibatis-sqlmap-2.jar
         : SQL Maps 프레임워크의 컴포넌트들을 포함하고 있는 파일.   
       - ibatis-dao-2.jar
         : DAO 프레임워크 컴포넌트들을 포함하고 있는 파일.
         
    ○ 주요 클래스 및 인터페이스
    //-- mybatis 와 소통하기 위해서 java 에서 필요한 결합 부품
       - SqlSessionFactoryBuilder
         ·SqlSessionFactory 를 만들기 위해 한 번만 사용하면 되기 때문에
           계속 이 클래스의 인스턴스를 유지할 필요가 없다.
    
       - SqlSessionFactory
         ·SqlSessionFactory 객체가 mybatis 의 전반적인 정보를 가지고 제어한다.
         ·SqlSessionFactory 객체를 생성하기 위해 SqlSessionFactoryBuilder 객체를 먼저 생성한다.
         ·SqlSessionFactory 객체는 SqlSessionFactoryBuilder 의 build 메소드로 생성한다.
         ·SqlSessionFactory 객체가 mybatis 의 전반적인 정보를 갖는 특성으로 인해 
           이 객체는 애플리케이션 내에서 한 개만 생성되어야 한다.
    
       - SqlSessionFactory 에서 SqlSession 객체 생성
         ·SqlSessionFactory 이름에서 알 수 있듯이 SqlSession 인스턴스를 만들 수 있다.
         ·SqlSession 은 데이터베이스에 대해 SQL 명령어를 실행하기 위해 필요한 모든 메소드를 가지고 있다.
           그래서 SqlSession 인스턴스를 통해 직접 SQL 구문을 실행할 수 있다.
           
         ex)
         Reader reader = Resource.getResourceAsReader("mybatis/mybatis-config.xml");
         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
         SqlSession session = factory.openSession();
         
       - SqlSession
         각각의 스레드는 자체적으로 SqlSession 인스턴스를 가져야 한다.
         SqlSession 인스턴스는 각 요청을 받은 쿼리문을 실행하는 객체이다.
         따라서 SqlSession 인스턴스는 공유되지 않고, thread safety 하게 만들어지지도 않았다.
         (thread safety : 여러 스레드가 접근해서 사용해도 정보가 어긋나지 않도록 만들어지는 것)
         그렇기 때문에 이 인스턴스를 공유해서 사용하지 않는다.
         예를 들어, 어떤 클래스 안의 static 변수나, 서블릿의 HttpSession 과 같은
         관리 범위 안에 저장해서도 안되는 것이다.
         만약, 사용해야 할 경우에는 Http 요청을 받을 때 마다 만들고, 
         응답을 리턴 할 때 마다 SqlSession 을 닫아야(반납해야)한다.
         SqlSession 이 닫히지 않으면 해당 인스턴스 리소스가 계속 유지되므로 꼭 닫아야한다.
         
         ex)
         ...
         SqlSession session = SqlSessionFactory.openSession();
         try
         {
         	...
         }
         finally
         {
         	session.close();	// ◀◀◀
         }
         
         
         ex)
         ...
         SqlSession session = SqlSessionFactory.openSession();
         try
         {
         	...
         }
         finally
         {
         	session.close();	// ◀◀◀
         }
         
       - Mapper 인스턴스
         Mapper 는 SQL 구문과 객체를 설정해놓은 대로 바인딩하기 위한 인터페이스이다.
         Mapper 인터페이스의 인스턴스는 SqlSession 에서 생성한다.
         그래서 Mapper 인스턴스의 가장 좋은 스코프는 SqlSession 과 동일하다.
         사용할 메소드가 호출이 되면 생성되고 종료되기 때문에 명시적으로 닫을 필요는 없다.
         
         ex)
         ...
         SqlSession session = SqlSessionFactory.openSession();
         try
         {
         	BlogMapper mapper = session.getMapper(BlogMapper.class);
         }
         finally
         {
         	session.close();
         }
       
       - Mapper XML 파일
         mybatis 의 가장 큰 장점은 매핑된 구문이며,
         SQL Map XML 파일은 상대적으로 간단하다.
         그리고 동일한 기능의 JDBC 코드와 비교하면 다량의 코드가 감소하기도 한다.
         즉, mybatis 는 SQL 을 작성하는데 집중하도록 설계 되었다.
         
         ※ SQL Map XML 파일은 첫 번째(first class) 요소만을 가진다.
         · cache : 해당 명명공간을 위한 캐시 설정
         · cache-ref : 다른 명명공간의 캐시 설정에 대한 참조
         · resultMap : 데이터베이스 결과 데이터를 객체에 로드하는 방법을 정의하는 요소
         · parameterMap : 권장하지 않음
                           과거에는 파라미터를 매핑하기 위해 사용하였으나 현재는 사용하지 않음
         · sql : 다른 구문에서 재사용하기 위한 SQL 조각
         · insert : 매핑된 insert 구문
         · update : 매핑된 update 구문
         · delete : 매핑된 delete 구문
         · select : 매핑된 select 구문

    Mybatis Framework 환경설정(이클립스 버전)
    ■■■ Mybatis Framework 환경설정(이클립스 버전) ■■■
    
    1. 『http://blog.mybatis.org/』에서 mybatis 다운로드
       - 『products』 메뉴 선택(클릭)
          → https://blog.mybatis.org/p/products.html 로 이동
       - Products 리스트에 보여지는 항목들 중
         『MyBatis 3   SQL Mapping Framework for Java   download』 항목의 download 선택
          → https://github.com/mybatis/mybatis-3/releases 로 이동
          
       - 클릭 후 이동한 『https://github.com/mybatis/mybatis-3/releases』 페이지에서
         『mtbatis-3.5.10』항목의『Asset』 선택(클릭, ▶Assets → ▼Assets) 하여 노드를 확장한다.
       
       - 확장된 노드의 목록들 중 『mybatis-3.5.10.zip』선택(클릭) 
         → 파일 다운로드 진행
      
       - 다시 뒤로가기 버튼 선택(클릭)
         → https://blog.mybatis.org/p/products.html 로 이동
       
       - 이동한 페이지에서 Integration 리스트에 보여지는 항목들 중
         『Spring	Integration with Spring	download | docs』
         항목의 download 선택(클릭)
         → https://github.com/mybatis/spring/releases 로 이동
    
       - 클릭 후 이동한 『https://github.com/mybatis/spring/releases』 페이지에서
         『mybatis-spring-1.3.2』항목의 『Asset』 선택(클릭, ▶Assets → ▼Assets) 하여 노드를 확장한다.
       
       - 확장된 노드의 목록들 중 『mybatis-spring-1.3.2.zip』선택(클릭) 
         → 파일 다운로드 진행
         
    2. 다운로드 완료된 파일의 압축을 해제하여 다음과 같은 파일을 준비한다.
       - mybatis-3.5.10.jar
       - mybatis-spring-1.3.2.jar
    
    3. SpringMVC + mybatis 프로젝트 실습 관련 라이브러리 등록
    
       - org.springframework.aop-3.0.2.RELEASE.jar
       - org.springframework.asm-3.0.2.RELEASE.jar
       - org.springframework.beans-3.0.2.RELEASE.jar
       - org.springframework.context-3.0.2.RELEASE.jar
       - org.springframework.core-3.0.2.RELEASE.jar
       - org.springframework.expression-3.0.2.RELEASE.jar
       - org.springframework.jdbc-3.0.2.RELEASE.jar
       - org.springframework.transaction-3.0.2.RELEASE.jar
       - org.springframework.web.servlet-3.0.2.RELEASE.jar
       - org.springframework.web-3.0.2.RELEASE.jar
    
       - com.springsource.org.apache.commons.logging-1.1.1.jar
    
       - ojdbc6.jar
    
       - jstl.jar
       - standard.jar
    
         +
    
       - mybatis-3.5.10.jar
       - mybatis-spring-1.3.2.jar
    
    ※ 매퍼(Mapper) XML 샘플
    
       다운로드를 수행한 pdf 파일 (mybatis-3.5.10.pdf) 의 내용 중 XML 관련 내용을 확인하여
       샘플 DTD 를 구성할 수 있도록 한다.
       → pdf 페이지번호 (문서 형식 상 : 4 / 실제 내용 상 : 8)
    
       <?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="org.mybatis.example.BlogMapper">
        <select id="selectBlog" resultType="Blog">
        select * from Blog where id = #{id}
        </select>
       </mapper>

    SpringMVC + Annotation + Mybatis 프로젝트 실습 01
    mybatisWork01
    ■■■ SpringMVC + Annotation + Mybatis 프로젝트 실습 01 ■■■
    
    ○ 프로젝트 
       : mybatisWork01
       
    ○ 관련 라이브러리
       : 위에서 정리한 내용 참조
       
    ○ 기능 구현
       : 마이바티스 환경 구성 및 정상 실행 여부 확인

    dispatcher-servlet 순서에 따른 이해 필수

    • Hello.jsp
    더보기
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Hello.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>mybatis 환경 구성 테스트</h1>
    	<hr />
    </div>
    
    <div>
    	<!-- <h2>테스트</h2> -->
    	<h2>${message }</h2>
    </div>
    
    </body>
    </html>

    • web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    	id="WebApp_ID" version="3.1">
    	<display-name>mvc01</display-name>
    	<welcome-file-list>
    		<welcome-file>index.html</welcome-file>
    		<welcome-file>index.htm</welcome-file>
    		<welcome-file>index.jsp</welcome-file>
    		<welcome-file>default.html</welcome-file>
    		<welcome-file>default.htm</welcome-file>
    		<welcome-file>default.jsp</welcome-file>
    	</welcome-file-list>
    	
    	<!-- ※ Spring MVC Framework 등록 -->
    	<!--    → Front Controller 등록 -->
    	<!--       → DispatcherServlet 등록 -->
    
    	<servlet>
    		<servlet-name>dispatcher</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>dispatcher</servlet-name>
    		<url-pattern>*.action</url-pattern>
    	</servlet-mapping>
    
    	<!-- check -->	
    	<!-- ※ 필터 등록 → 인코딩 필터 등록 → CharacterEncodingFilter -->
    	<!-- 서블릿 처럼 filter 과 filter-mapping 이 한 쌍 -->
    	<filter>
    		<filter-name>encodingFilter</filter-name>
    		<!-- 필터를 직접 설계한 경우 class 에 경로 입력 -->
    		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    		
    		<!-- 필터 설정 → 필터에 파라미터 초기값 지정 -->
    		<init-param> <!-- 처음 파라미터 값을 설정 -->
    			<!-- CharacterEncodingFilter 가 가지고 있는 파라미터 -->
    			<param-name>encoding</param-name>
    			<param-value>UTF-8</param-value>
    		</init-param>
    	</filter>
    	
    	<filter-mapping>
    		<filter-name>encodingFilter</filter-name>
    		<url-pattern>/*</url-pattern> <!-- 모든 요청에 대해서 적용 / 주소 하나에만 적용할 수 도 있다. -->
    	</filter-mapping>
    	
    </web-app>

    • dispatcher-servlet.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:p="http://www.springframework.org/schema/p"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
    						http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    						http://www.springframework.org/schema/context
    						http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
    	<!-- ※ 사용자 정의 Controller 객체 등록 및 URL 매핑 주소 등록 -->
    	<!--    - 『name=""』 속성에 매핑 주소를 등록한다. -->
    	<!--       이 과정에서 Front Controller 가 갖고있는 확장자의 형태로 구성한다. -->
    	<!--    - 『class=""』 속성은 Controller 객체의 클래스 경로 및 이름을 등록한다. -->
    	
    	<!--
    	① 기존코드
    	※ Annotation 을 활용하여 Controller  객체를 등록할 수 있도록 한다. 
    	-->
    	<context:component-scan base-package="com.test.mybatis" />
    
    	<!--
    	③ mybatis 등록 과정에서 생겨나는 추가코드 『2』
    	※ mybatis 를 사용하기 위한 환경 설정을 추가하는 과정에서 필요한
    	   dataSource 를 사용하기 위한 환경 설정 추가
    	   → SimpleDriverDataSource
    	-->
    	<bean id="localDataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
    		<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
    		<property name="url" value="jdbc:oracle:thin:@211.238.142.49:1521:xe"></property>
    		<property name="username" value="scott"></property>
    		<property name="password" value="tiger"></property>
    	</bean>
    	
    	<!--
    	② mybatis 등록 과정에서 생겨나는 추가 코드 『1』
    	※ mybatis 를 사용하기 위한 환경 설정 추가
    	   → SqlSessionFactoryBean 등록
    	-->
    	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    		<!-- ④ dataSource 를 등록하고 와서 다시 추가 -->
    		<property name="dataSource" ref="localDataSource"></property>
    		
    		<!--
    		⑤ 매퍼 파일을 작성하고 와서 다시 추가
    		//-> 현재 마이바티스에서 사용하게 될 가장 중심이 되는 것은 Mapper라고 할 수 있다.
    		-->
    		<property name="mapperLocations" value="classpath:com/test/mybatis/mapper/*.xml"></property>
    		<!-- >> 클래스 패스 경로는 ~~고 안에 있는 xml 파일들을 사용하면 됨! -->
    	</bean>
    	
    	<!--
    	⑥ mybatis 등록 과정에서 생겨나는 추가 코드 『3』
    	※ sqlSession 을 사용하기 위한 환경 설정 추가
    	   → SqlSessionTemplete 등록
    	-->
    	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    		<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
    		<!-- >> 생성자-인자 리스트의 0번째에 ref 를 넘기며 구성하겠다.// arg = argument -->
    	</bean>	
    	
    </beans>

    • Sample.java
    /*===================
       Sample.java
       - 컨트롤러 객체
    ====================*/
    
    package com.test.mybatis;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    @Controller
    public class Sample
    {
    	@RequestMapping(value="/hello.action", method=RequestMethod.GET)
    	public String hello(Model model)
    	{
    		model.addAttribute("message", "Hello Spring annotation + MVC + mybatis Framework");
    		
    		return "/WEB-INF/view/Hello.jsp";
    	}
    	
    }

    • ISampleDAO.java
    /*===================
       ISampleDAO.java
       - 인터페이스
    ====================*/
    package com.test.mybatis;
    
    public interface ISampleDAO
    {
    	// 딱히 여기서 뭘 할건 아니고
    	// mybatis 를 적용해도 Spring 이 멀쩡하게 돌아가는 것을 확인하기 위해 구성
    }

    • SampleDAO.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.mybatis.ISampleDAO">
    <!--
    	namespace : 이전에 DAO 에서 메소드에서 sql 구문을 가지고 있었는데
    	            이제 해당 인터페이스에서 선언만 해두면 그것을 바탕으로
    	            매퍼가 연결시켜주어 기능을 하게 될 것.  
    	            
    	// 필요에 따라 select insert 등,,, 작성 가능
    -->
    </mapper>

    • hello.action (최초 요청주소 빈 파일)
    728x90
Designed by planet-si