20221111-76 myBatis 게시판(Vaildation/PL/SQL(부서조회 Cursor)/DTO📛MAP 비교/interCeptor

공현지·2022년 11월 11일
0

spring

목록 보기
20/30

복습

🔽 dto 작성했으면 configuration.xml에 꼭 적어주기

하나짜리는 그냥 넣고 두개이상은 dto로 넣음 .

Vaildation 사용

다시정리 --

PL/SQL(부서조회 Cursor) ->맵으로 조회

EmpController

@GetMapping(value = "writeDeptCursor")
	public String writeDeptCursor(Model model) {
		System.out.println("EmpController writeDeptCursor start **********");
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("sDeptno", 30);
		map.put("eDeptno", 60);
		es.selListDept(map);
        //start deptno 30부터
		//end deptno   60까지 가져오기  

        
		List<Dept> deptLists = (List<Dept>) map.get("dept");
		for(Dept dept :deptLists) {
			System.out.println("dept.getDname->"+dept.getDname());
			System.out.println("dept.getLoc->"+dept.getLoc());
		}
		System.out.println("deptList Size->"+deptLists.size() );
		model.addAttribute("deptList",deptLists);

	return "writeDeptCursor";
	
}

EmpService

void selListDept(HashMap<String, Object> map);

EmpServiceImpl

	@Override
	public void selListDept(HashMap<String, Object> map) {
		System.out.println(" EmpServiceImpl selListDept Start . . . ");
		dd.selListDept(map);
		
	}

DeptDao

	void selListDept(HashMap<String, Object> map);

DeptDaoImpl

@Override
	public void selListDept(HashMap<String, Object> map) {
		System.out.println("DeptDaoImpl insertDept start. . . ");
		session.selectOne("procDeptList", map);
		
	}

Dept.xml

//파라메터 맵방식으로 받고 상태 프로시저를 호출받기 떄문에 콜라블
 <select id="procDeptList" parameterType="java.util.Map" statementType="CALLABLE">
	        { 
	             call Dept_Cursor3(
	                       #{sDeptno,mode=IN,    jdbcType=INTEGER}
	                     , #{eDeptno,mode=IN,    jdbcType=INTEGER}
	                     , #{dept,   mode=OUT,   jdbcType=CURSOR
	                     ,   javaType=java.sql.ResultSet 
	                     ,   resultMap=DeptResult}
	                     )
	        }
   
   </select>




✅DB에 커밋시키기
OUT SYS_REFUCURSOR 커서문 자체가 한번에 넣어줌

🔽 CUSOR 맵방식 실행 완


DTO📛MAP 비교

비교DTOMAP
정의Class로 선 정의즉흥적 구성
Parameter 전달DTO -> Setter Or 생성자map.put
사용용도명확한 정의시간부족/대화부족
장점유지보수 용이기능개발 시간 절감

interCeptor ✅

인터셉터 총설명 --

상황에 따라 원하는 페이지로 보내주는것 -->인터셉터
(**인터셉터 해줄려면 환경파일을 먼저 설정해줘야함)

정식회원이면 원하는 페이지로 보내주고
회원이 아니면 로그인페이지로 보내주는것

1 컨피그레이션 --> 웹엠브이씨 컨피그어럴을 먼저 등록
registry 저장소

저장소에다가 인터셉터를 추가해라 (내가등록해둔 샘플인터셉터를 등록함
인터셉터로 치고 들어오면 샘플인터셉터로 가겟다

인터셉터에는 ( 핸들러인터셉터를 꼭 걸어야함 )그래야 인터셉터걸림

pre 먼저 실행 그다음 controller의 고유 업무 실행후 리턴타기전에 post 마지막에 실행

Controller에서 인터셉터 로직 타기전에
샘플인터셉터로 가서
preHandle가 제일먼저 처리되어짐
그다음에 다시 컨트롤러 로직타고 리턴하기전에
다시 샘플인터셉터로 가서
그다음에 posthandle 는 제일 마지막에 처리되어짐
권한이 없으면 로그인부터해

정상유저면 회원정보를 보여줄게

컨트롤러


인터셉터랑 aop랑 비슷함

aop --> 회사단위 큰단위 에 실행하는것

인터셉터 -->개인단위 업무단위 나눠서 실행시켜서 걸리게하는것
url로 보냇을때 그게 맞냐 안맞냐해서 a로갈지 b로 갈지


EmpController ✔시작화면

//interCeptor(가로채기) 시작화면 
	
	@RequestMapping(value = "interCeptorForm")
	public String interCeptorForm(Model model) {
		System.out.println("interCeptorForm start ******");
		return "interCeptorForm";
	}
	

interCeptorForm

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>interCepter</title>
</head>
<body>
	<h2>직원정보 조회</h2>
	<c:if test="${msg!=null}">${msg}</c:if>
	<form action="interCeptor" name="frm">
	<table>
		<tr><th>사번</th><td><input type="text" name="id" required="required"></td></tr>
		<tr><td><input type="submit" value="확인"></td></tr>
	</table>
	</form>
</body>
</html>

EmpController

//2interCeptor Number
	//interCeptor(가로채기) 
	@RequestMapping(value = "interCeptor")
	public String interCeptor(String id, Model model) {
		System.out.println("interCeptor id->"+id);
		//존재 1 ,         비존재 0
		int memCnt = es.memCount(id);
		System.out.println("memCnt id->"+memCnt);
		model.addAttribute( "id", id);
		model.addAttribute( "memCnt", memCnt);
		System.out.println("interCeptor Test End");
		return "interCeptor";	
		
	}

EmpService (memCount )

int memCount(String id);

EmpServiceImpl

	private final Member1Dao md;//맨위에걸기


@Override
	public int memCount(String id) {
		   System.out.println("EmpServiceImpl empDeptList memCount id->"+id );
		return md.memCount(id);
	}

Member1Dao

package com.oracle.oBootMybatis01.dao;

public interface Member1Dao {
   int memCount(String id);    //member1의 Count
}



Member1DaoImpl

package com.oracle.oBootMybatis01.dao;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import lombok.RequiredArgsConstructor;
@Repository
@RequiredArgsConstructor
public class Member1DaoImpl implements Member1Dao {
	private final SqlSession session;

	@Override
	public int memCount(String id) {
		int result = 0 ;
		  System.out.println("Member1DaoImpl id->  "+id);
		
		try {
			result =session.selectOne("memCount" , id);
            
            
		} catch (Exception e) {
			System.out.println("Member1DaoImpl   memCount Exception->" +e.getMessage());
		}
		
		return result;
	}

}


Member1.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">

<mapper namespace="com.oracle.oBootMybatis01.Member1Mapper">

<select id="memCount"  parameterType="java.lang.String" resultType="int">
   Select Count(*) from member1 where id= #{id}


</select>



</mapper>

interCeptor

<body>
    id        : ${id} <p>
    memcnt    : ${memCnt}
    

</body>

🔽

EmpController ✔가로채기 -> SampleInterceptor로 이동했다가 1번 로직타고 다시 돌아와서 리턴 시킴

//2interCeptor Number
	//interCeptor(가로채기) 
	@RequestMapping(value = "interCeptor") //인터셉털을 치면 인터셉터걸림
	public String interCeptor(String id, Model model) {
		System.out.println("interCeptor start ******");
		System.out.println("interCeptor id->"+id);
		//존재 1 ,         비존재 0
		int memCnt = es.memCount(id);
		System.out.println("memCnt id->"+memCnt);
		model.addAttribute( "id", id);
		model.addAttribute( "memCnt", memCnt);
		System.out.println("interCeptor Test End");
		return "interCeptor";	//User 존재하면 User 이용 조회 Page
		
	}

SampleInterceptor ✔1번로직타고 -> Controller가서 2번 로직 모두 탄후에 다시 돌아와서 3번 로직 타기 ( SampleInterceptor 해도 configuration에서 환경설정해줘야함)

  package com.oracle.oBootMybatis01.service;

import java.lang.reflect.Method;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class SampleInterceptor implements HandlerInterceptor {
   public SampleInterceptor() {
   }
   
   // 3번인터셉터 걸린후 에 실행 
   @Override
   public void postHandle(HttpServletRequest request, 
                     HttpServletResponse response, 
                     Object handler,
         ModelAndView modelAndView) throws Exception {
      log.info("post handle.........................");
      String ID = (String) modelAndView.getModel().get("id");
      int memCnt = (int) modelAndView.getModel().get("memCnt");
      log.info("postHandle memCnt: {}",memCnt);
      if(memCnt < 1) {
         log.info("memCnt Not exists");
         request.getSession().setAttribute("ID", ID);
         // User가 존재하지 않으면 User interCeptor Page(회원등록) 이동
         response.sendRedirect("doMemberWrite");
      } else {   // 정상    login   User
         log.info("memCnt exists");
         request.getSession().setAttribute("ID", ID);
         // User가 존재하면 User interCeptor Page(회원 List) 이동
         response.sendRedirect("doMemberList");
      }
   }
   
   // 1번 인터셉터 걸리기전에 실행 
   @Override
   public boolean preHandle(HttpServletRequest request, 
                      HttpServletResponse response, 
                      Object handler)
         throws Exception {
      log.info("pre handle..........................");
      HandlerMethod method = (HandlerMethod) handler;
      Method methodObj = method.getMethod();
      log.info("Bean: {}",method.getBean());
      log.info("Method: {}",methodObj);
      return true;
   }
}

WebMvcConfiguration (인터셉터 걸어주는 환경파일)

package com.oracle.oBootMybatis01.configuration;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.oracle.oBootMybatis01.service.SampleInterceptor;

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

	@Override     //인터셉터를 등록하겟다
	public void addInterceptors(InterceptorRegistry registry) {
		// 누군가 URL을 interCeptor을 치면 SampleInterceptor() 페이지로 가서 처리 해줌 
       
		registry.addInterceptor(new SampleInterceptor()).addPathPatterns("/interCeptor");
	//내가만든인터셉터페이지.       
    
	}
}

EmpController

있는번호 누르면 리스트 출력
없으면 다시 입력창


//SampleInterceptor 내용을 받아처리 
	@RequestMapping(value = "doMemberWrite", method = RequestMethod.GET )
	 private String doMemberwrite(Model model, HttpServletRequest request) {
		String ID = (String) request.getSession().getAttribute("ID");
		System.out.println("doMemberWrite 부터 하세요 ");
		model.addAttribute("id", ID);
		return  "doMemberWrite";
		

		
	}
	 
	//interCeptor 진행 test
	@RequestMapping(value = "doMemberList")
	private String doMemberList(Model model, HttpServletRequest request) {
		String ID = (String) request.getSession().getAttribute("ID");
		System.out.println("doMemberList test start id -> "+ID);
		Member1 member1 = null;
	    //Member3 List Get Service 
        //있는번호 검색하면 리스트 뜸 
		List<Member1> listMem =es.listMem(member1);
		model.addAttribute( "ID",ID);
		model.addAttribute("listMem", listMem);
	return "doMemberList";
	
	}

Member1


package com.oracle.oBootMybatis01.model;

import java.util.Date;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Member1 {
 private String id;
 private String name;
 private String password;
 private Date reg_date;
}


EmpService

	List<Member1> listMem(Member1 member1);

EmpServiceImpl

@Override
	public List<Member1> listMem(Member1 member1) {
		   System.out.println("EmpServiceImpl listMem Start" );
		return md.listMem(member1);
	}

Member1Dao


 List<Member1> listMem(Member1 member1);

Member1DaoImpl


	@Override
	public List<Member1> listMem(Member1 member1) {
		  System.out.println("Member1 start. . . ");
			List<Member1> listMember1 = null;
			try {
				listMember1 =session.selectList("listMember1" ,member1);
			} catch (Exception e) {
				System.out.println("Member1DaoImpl   listMem Exception->" +e.getMessage());
			}
		return listMember1;
	}


Member.xml

<select id="listMember1" parameterType="Member1" resultType="Member1">
		SELECT * FROM member1
</select>

doMemberWrite

<h2>직원정보 입력</h2>
<form action="" method="post" name="frm">
<table>
	<tr><th>사번</th><td><input type="text" name="id" 
		required="required" maxlength="4" value="${id}">
		<input type="button" value="중복확인" 
		onclick="chk()"> </td></tr>
	<tr><th>비밀번호</th><td><input type="text" name="password" 
		required="required"> </td></tr>
	<tr><th>이름</th><td><input type="text" name="name" 
		required="required"></td></tr>

	<tr><td colspan="2"><input type="submit" value="확인"></td></tr>
</table>
</form>

</body>

doMemberList

<h2>회원 정보</h2>
조회자 ID : ${ID}
<table>
	<tr><th>ID</th><th>이름</th><th>비밀번호</th><th>등록일</th></tr>
	<c:forEach var="listMem" items="${listMem}">
		<tr><td>${listMem.id }</td>
		    <td>${listMem.name }</td>
			<td>${listMem.password }</td>
			<td>${listMem.reg_date }</td>
		</tr>
	</c:forEach>
</table>
</body>

✅interCeptor 완
있는 사번입력시 회원정보 조회 가능
없는 사번 입력시 직원정보 입력창으로 이동

0개의 댓글