feat : 샘플 코드작성 & 상세 주석
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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>
|
||||
Loading…
Reference in New Issue