클라이언트 > 컨트롤러 > 서비스 > 매퍼 > 서비스 > 컨트롤러 > 뷰 > 클라이언트
Spring MVC
Mybatis
EL / JSTL
DI + AOP(관점지향)
데이터 insert 과정
클라이언트 웹 브라우저에서 데이터 입력 받음 (form, input 태그)
> 입력된 데이터 Controller로 전송 > Controller가 받은 데이터 Service로 넘기기
> Service에서 mapper로 넘겨서 Query 진행 > Query 결과 Service로 반환
> 반환된 결과 Controller로 반환 > 클라이언트 View로 결과 출력
sts 4.22.1 ver download
spring 3.2.6 (mybatis framework 사용하기 위함)
STS dependency 설정 후 LPS 에러 발생
에러명 : failed to fetch generation from spring io port out of range-1
>>
stackoverflow에 의하면 application.properties에서
port 번호를 할당하지 않았기 때문에 발생한 에러라고 함
# 커넥션 풀
톰캣이 부팅됨과 동시에 커넥션을 만들어 List에 저장한 후
application.attribute에 저장
application.attribute에 저장하는 이유 > 톰캣 유지시간 동안 사용하기 위함
커넥션풀을 사용하면 이점이 있지만 톰캣 부팅속도가 증가한다
>> 개발자 입장에서의 단점일 뿐임
Spring MVC model 구현
feat. Spring boot, lombok, Mybatis, JSTL, MariaDB, JSP(View)
Controller, VO, Mapper를 이용한 Spring MVC 구조 구현
application.properties
# 서버설정
spring.application.name=mvc
server.servlet.context-path=/
server.port=80
# 뷰 설정
# /WEB-INF/view/~~~.jsp
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
# 커넥션 풀
# datasource : 커넥션 풀을 구현하기 위한 데이터타입
# datasource는 Connection의 배열로 구성됨
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/mvc
spring.datasource.username=root
spring.datasource.password=java1234
MemberVO.java (VO)
package com.example.mvc.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data // lombok annotation, getter, setter 자동생성 등
@AllArgsConstructor // 모든 변수를 인자로 받는 생성자 생성
@NoArgsConstructor // 인자 없는 기본 생성자 생성
public class MemberVO {
private int memberNo;
private String memberName;
private int memberAge;
private String createDate;
}
MemberMapper.java (Mapper)
package com.example.mvc.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.example.mvc.vo.MemberVO;
@Mapper // DAO 자동생성, 다형성에 따라 MemberMapper로 selectMemberList() 호출 가능
public interface MemberMapper {
public List<MemberVO> selectMemberList();
// mapper.xml 파일의 쿼리와 합쳐져
// JDBC 코드가 구현된 클래스를 만든다
}
MemberMapper.xml (Mapper / MyBatis)
<?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">
<!-- namespace의 값은 mapper interface 이름 -->
<mapper namespace="com.example.mvc.mapper.MemberMapper">
<select id="selectMemberList" resultType="com.example.mvc.vo.MemberVO">
SELECT
member_no memberNo, <!-- setMemberNo() -->
member_name memberName,
member_age memberAge,
create_date createDate
FROM
member
</select>
</mapper>
MemberContoller.java (Controller)
package com.example.mvc.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import com.example.mvc.mapper.MemberMapper;
import com.example.mvc.vo.MemberVO;
@Controller
public class MemberController {
@Autowired // 의존관계주입(DI)
private MemberMapper memberMapper; // class x implements MemberMapper
@GetMapping("/memberList")
public String memberList(Model model) { // WebServlet("") 역할
List<MemberVO> list = memberMapper.selectMemberList();
model.addAttribute("list", list);
// request.setAttribute("list", list);
return "memberList"; // request.getRequestDispatcher("memberList").forward(request, response) 역할
}
}
memberList.jsp (View) - JSTL 사용
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>멤버 목록</title>
</head>
<body>
<h1>Member List</h1>
<c:forEach var="m" items="${list}">
<div>번호 : ${m.memberNo}</div>
<div>이름 : ${m.memberName}</div>
<div>나이 : ${m.memberAge}</div>
<div>생성날짜 : ${m.createDate}</div>
</c:forEach>
</body>
</html>
memberList.jsp 출력결과
