📌Mybatis config 설정, front-controller pattern 설정
📍package com.ysh.studySpring.domain.vo; import lombok.Data; @Data //getter, setter를 자동으로 만들어 준다. public class TestVo { private String id; private String name; }
📍package mapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.ysh.studySpring.domain.vo.TestVo; @Mapper public interface TestMapper { public List<TestVo> getList(); }
📍src/main/resources/config/config.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- TestMapper.xml에서resultType="com.ysh.studySpring.domain.vo.TestVo"너무 길어서 별칭을 주는 작업 --> <typeAliases> <typeAlias type="com.ysh.studySpring.domain.vo.testVo" alias="testVo"/> </typeAliases> </configuration>
📍src/main/resources/mappers/TestMapper.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"> <!-- 여기서 작성된 xml코드는 namespace와 연결이 된다. --> <mapper namespace="com.ysh.studySpring.mapper.TestMapper"> <!-- 연결할 경로를 알려주어야 한다 --> <!-- <select id="getList" resultType="com.ysh.studySpring.domain.vo.TestVo"> --> <select id="getList" resultType="TestVo"> <!-- config.xml에서 alias설정시 사용 가능 --> SELECT ID, NAME TBL_TEST </select> <!-- getList = interface이름과 동일 하게 --> </mapper>
📍package dependency.mapper; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import lombok.extern.log4j.Log4j; import mapper.TestMapper; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml") @Log4j public class TestMapperTests { @Autowired private TestMapper testMapper; @Test public void getListTest() { testMapper.getList().forEach(log::info); } }
📍target/classes/config/config.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- TestMapper.xml에서resultType="com.ysh.studySpring.domain.vo.TestVo"너무 길어서 별칭을 주는 작업 --> <typeAliases> <typeAlias type="com.ysh.studySpring.domain.vo.testVo" alias="testVo"/> </typeAliases> </configuration>
📍target/classes/mappers/TestMapper.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"> <!-- 여기서 작성된 xml코드는 namespace와 연결이 된다. --> <mapper namespace="com.ysh.studySpring.mapper.TestMapper"> <!-- 연결할 경로를 알려주어야 한다 --> <!-- <select id="getList" resultType="com.ysh.studySpring.domain.vo.TestVo"> --> <select id="getList" resultType="TestVo"> <!-- config.xml에서 alias설정시 사용 가능 --> SELECT ID, NAME TBL_TEST </select> <!-- getList = interface이름과 동일 하게 --> </mapper>
💡부가 설명, 동작 원리 설명`
test해보기 위한 과정
1)테이블 만들기(데이터 베이스 : devea or sqlyog)creat table tbl_test( id varchar2(1000) primary key, name varvhar2(500) ); insert into tbl_test values('hds1234', keivin); insert into tbl_test values('hds12345', keivin2); select * from tbl_test
2)sts에서(폴더 : 프로젝트명/srv/main/java) , (패키지 : com.ysh.studySpring.domain.vo) 패키지 생성, TestVo Class생성
domain -> vo, dto, dao를 담아주는 패키지
동작원리 정리
1.xml쪽에 sql문 작성 2.sql문과 연결할 mapper interface가 있어야 한다.(sql과 mapper interface의 메소드 연결 : 메서드를 실행하면 연결된 쿼리가 실행된다 -> 이때 return 또는 parameter가 필요하면 보내준다.) ==> java와 sql문을 분리시킨 것이 mybatis 프레임 워크 이다
Front-Controller 패턴 구조!
Req -사용자 요청(url) -> Dispatcher Servlet이 받는다. -> handeler Mapping이 요청 url에 맞는 controller가 붙은 클래스들을 찾는다 -> dispatcher Servlet에게 찾은 것을 알려준다 -> handler adapter(해당 controller의 정보를 전달해 주면 controller에 있는 메소드를 실행해 준다) -> Controller -> DBMS -> Controller -> handler adapter -> dispatcher Servlet -> viewResolver-> dispatcher Servlet -> view(결과값을 브라우저에 보여주기 위해서) -> html or jsp등 -> view ->dispatcher Servlet -> Resp
📌FrontController Pattern특징
HandlerMapping REQUEST ① ②↕ ③ ④ ↔ DispatcherServlet ↔ HandlerAdapter ↔ Controller RESPONSE ⑧ ⑥↕ ↕⑤ View ViewResolver ⑦↕ HTML, JSP 등
1(①). 사용자의 Request는 Front-Controller인 DispatcherServlet을 통해 처리된다. 2(②, ③). HandlerMapping은 Request의 처리를 담당하는 컨트롤러를 찾기 위해서 존재한다. 여러 객체 중 @RequestMapping 어노테이션이 적용된 것을 기준으로 판단하며, 적절한 컨트롤러가 찾아졌다면 HandlerAdapter를 이용해서 해당 컨트롤러를 동작시킨다. 3(④, ⑤). Controller는 Request를 처리하는 비지니스 로직을 작성하며, View에 전달해야 하는 데이터를 RequestScope에 담아서 전달한다. 응답 페이지 대한 경로 처리는 ViewResolver를 이용하게 된다. 4(⑤). ViewResolver는 Controller가 리턴한 결과 값을 전체 경로로 완성시켜준다. 5(⑥, ⑦). View는 실제 응답을 보내야하는 데이터를 HTML, JSP등을 이용해서 생성하는 역할을 한다. 6(⑧). 만들어진 응답 페이지를 DispatcherServlet을 통해 전송한다. * 특징 - HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 기능 구현 - 다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능 - GET 방식, POST 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능 - 상속/인터페이스 방식 대신 어노테이션만으로도 설정 가능