feat : 샘플 코드작성 & 상세 주석

pull/4/head
Kurt92 2 months ago
parent ddcd06f639
commit 7d2c4ebab2

@ -0,0 +1,63 @@
package go.kr.project.biz.minwon.init.controller;
import egovframework.constant.TilesConstants;
import go.kr.project.biz.minwon.init.model.SampleDto;
import go.kr.project.biz.minwon.init.service.SampleService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
// 컨트롤러 어노테이션
// 컨트롤러의 역할을 한다는 표시이다.
// 컨트롤러 = 화면(브라우저) 에서 요청하는 url을 받는 역할
@Controller
// 로킹을 할수있는 어노테이션. log.info(); 를 통해 값들을 출력할 수 있다.
@Slf4j
// 생성자 인젝션을 자동으로 해주는 어노테이션
// https://dreamcoding.tistory.com/83 참고
// 해당 용어들이 어려우면 그냥 어노테이션을 붙이고 그 밑에 private final을 붙여 Service 객체를 불러온다고 생각하면 된다.
@RequiredArgsConstructor
public class SampleController {
// 위에서 설명한 생성자 인젝션이다.
private final SampleService sampleService;
// GetMapping 안에 있는 Url을 요청하면 해당 컨트롤러 매소드(함수)로 들어온다
// 이걸 [엔드포인트]라고 한다.
@GetMapping("/minwon/init/sample.do")
public String samplePageReturn() {
// .do로 리턴하는건 jsp페이지를 찾아서 리턴하라는 표시이다
// 꼭 스트링으로 리턴해야한다. 스트링리턴이 아니면 페이지를 찾지 않고 문자열을 리턴해버린다.
// webapp/WEB-INF/views 안에있는 jsp 페이지를 찾아준다.
// 타일즈는 화면 레이아웃이다. 기본적으로는 BASE를 붙이면 된다.
// 이렇게 리턴함면 sample.jsp를 찾아서 리턴해준다.
return "biz/minwon/init/sample" + TilesConstants.BASE;
}
// Sample.jsp 에서 만든 ajax 요청을 받는 매소드(함수)이다.
// 받아서 비즈니스에 맞춰 로직을 짜면 된다.
// 아래를 보면 위와 다르게 GetMapping 이 아니라 PostMapping이다.
// https://dev-coco.tistory.com/60 아래 블로그를 참고
@PostMapping("/minwon/init/sample-search.ajax")
public ResponseEntity<?> sampleAjaxMybatis(@RequestBody SampleDto.Request.Search testDto) {
// Dto란
// https://people-analysis.tistory.com/269
// 프론트에서 바디로 넘어온 데이터를 @RequestBody를 통해 맵핑한다. 키값이 맞아야 벨류를 가져온다.
List<SampleDto.Response.cpMain> result = sampleService.searchSample(testDto);
return ResponseEntity.ok(result);
}
}

@ -0,0 +1,15 @@
package go.kr.project.biz.minwon.init.mapper;
import go.kr.project.biz.minwon.init.model.SampleDto;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
//마이바티스 매퍼는 해당 어노테이션을 붙여 꼭 표시해줘야한다.
// 여기서 최종 쿼리가 있는 xml과 연결된다.
@Mapper
public interface SampleMapper {
List<SampleDto.Response.cpMain> selectAllSample(SampleDto.Request.Search searchDto);
}

@ -0,0 +1,37 @@
package go.kr.project.biz.minwon.init.model;
import lombok.Getter;
import lombok.Setter;
public class SampleDto {
// 요즘 트렌드에 맞춰 이너클레스를 사용한다.
// Request(파라미터를 받을 형식 객체) 와 Response(응답해줄 형식 객체)로 나눠서 관리한다.
//프론트에서 파라미터 받아오는 객체
public static class Request {
@Getter
@Setter
public static class Search {
//예제로
private String mmState;
}
}
//디비 조회해서 프론트로 반납해주는 객체
public static class Response {
@Getter
@Setter
public static class cpMain {
private String mmCode;
private String mmState;
private String mmCarNo;
private String mmKeum1;
private String mmKeum2;
private String mmDate;
private String mmTime;
}
}
}

@ -5,7 +5,7 @@ import org.springframework.stereotype.Service;
import java.util.List;
public interface MinwonInitService {
public interface MinwonInitService{
List<MinwonInitDto.Response.InitAnswers> findInitAnswers(MinwonInitDto.Request.SearchMinwonInitList dto);

@ -0,0 +1,16 @@
package go.kr.project.biz.minwon.init.service;
import go.kr.project.biz.minwon.init.model.SampleDto;
import java.util.List;
// 실제 로직을 이어주는 인터페이스이다.
// 해당 인터페이스를 정의하면 반드시 implements를 통해 구현을 해야한다.
// 사실 이 인터페이스는 필요없다고 생각하지만 eGov 필수사항이라 어쩔수 없이 넣었다.
public interface SampleService {
//여기는 여러가지 동작을 넣을수 있겠다.
//이 인터페이스에 정의한 매소드는 반드시 impl로 구현해야함.
//조회
List<SampleDto.Response.cpMain> searchSample(SampleDto.Request.Search testDto);
}

@ -0,0 +1,32 @@
package go.kr.project.biz.minwon.init.service.impl;
import go.kr.project.biz.minwon.init.mapper.SampleMapper;
import go.kr.project.biz.minwon.init.model.SampleDto;
import go.kr.project.biz.minwon.init.service.SampleService;
import lombok.RequiredArgsConstructor;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
//아까 어쩔수 없이 넣은 인터페이스의 구현체이다.
//컨트롤러에서 인터페이스를 호출하면 이게 실행되는것이다.
// EgovAbstractServiceImpl 이 이고브 상속때문에 인터페이스를 만든다.. 제길
//서비스 어노테이션은 꼭 붙여야된다.
@Service
//컨트롤러에서 설명한 생성자 인젝션 어노테이션이다. dao(매퍼인터페이스)를 사용하기 위함이다.
@RequiredArgsConstructor
public class SampleServiceImpl extends EgovAbstractServiceImpl implements SampleService {
//dao : DataBase Access Object로 디비와 연겷하는 역할은 한다.
// 현재 프로젝트에서는 dao역할은 mybatis 매퍼인터페이스로 한다.
private final SampleMapper sampleMapper;
@Override
public List<SampleDto.Response.cpMain> searchSample(SampleDto.Request.Search testDto) {
// 매퍼 xml의 resultType을 리턴값으로 받아야한다.
List<SampleDto.Response.cpMain> result = sampleMapper.selectAllSample(testDto);
return result;
}
}

@ -0,0 +1,25 @@
<?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="go.kr.project.biz.minwon.init.mapper.SampleMapper">
<!--
매퍼인터페이스의 매소드명과 id가 일치해야 한다.
parameterType은 가져올 파라미터,
resultType은 쿼리 결과를 반납하는 객체를 넣어준다.
아래 보면 이너클래스는 $형태로 들어간다.
-->
<select id="selectAllSample"
parameterType="go.kr.project.biz.minwon.init.model.SampleDto$Request$Search"
resultType="go.kr.project.biz.minwon.init.model.SampleDto$Response$cpMain">
select *
from cp_main
where 1=1
and mm_state = #{mmState}
</select>
</mapper>

@ -1,17 +1,54 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div class="main_body">
<input type="text" id="input1" value="샘플 인풋1"></br>
<input type="text" id="input2" value="샘플 인풋2"></br>
<input type="text" id="input3" value="샘플 인풋3"></br>
<input type="text" id="input4" value="샘플 인풋4"></br>
</br></br></br>
<input type="button" value="샘플 버튼">
</br></br></br></br>
<select>
<option value="aaa">aaa</option>
<option value="bbb">bbb</option>
<option value="ccc">ccc</option>
<option value="ddd">ddd</option>
<option value="eee">eee</option>
</select>
</br></br></br></br>
<input type="checkbox"> 샘플 체크박스1
<input type="checkbox"> 샘플 체크박스2
<input type="checkbox"> 샘플 체크박스3
</br></br></br></br>
<input type="date">
</br>
</div>
<%--
아래부터가 JS(자바스크립트이다)
자바스크립트는 위에 있는 html 요소들을 동적으로 컨트롤하는 역할을 한다.
자바 스크립트에는 정해진 룰은 없지만 편의를 위해 코드 템플릿을 만들어 사용하도록 한다.
--%>
<script type="text/javascript">
// 전체 코드를 함수화 한다
const fnBiz = {
init: () => {
fnBiz.search();
},
search: () => {
//아작스는 비동기 서버호출 함수이다. 아래 블로그 설명글 참고
//https://jbground.tistory.com/4
$.ajax({
url: "",
type: "POST",
@ -25,14 +62,17 @@
});
}
}
// $(function) 은 제이쿼리 초기화 함수로 $(document).ready(function(){} 과 똑같은 코드이다
// 초기화라 함은 도큐멘트 (페이지) 가 열릴때 실행되는 코드이다.
// 아래는 페이지가 열리면서, fnBiz.init() 을 실행시키라는 뜻이다.
// 예를들어 페이지 진입하면서 바로 조회를 하게 만들고 싶다면, 에제와 같이 init함수 안에 조회하는 함수호출해버리면 된다.
// 안에 로직을 나열해도 상관없지만, 추후 유지보수를 위해 함수를 기능별로 묶어 함수호출을 통한 플로우 개발을 지향한다.
$(function () {
fnBiz.init();
});

Loading…
Cancel
Save