Spring Framework14,15(Mybatis config설정, 실제 DB테이블 값 불러오기, Front Controller 패턴)

유성훈·2023년 2월 14일
0

Spring Framework공부

목록 보기
7/7

📌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 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능
 - 상속/인터페이스 방식 대신 어노테이션만으로도 설정 가능
profile
프로그래밍 공부

0개의 댓글