Merge문이란?

 

insert , update , delete 를 한번에 처리 가능하므로

 

대용량의 데이터가 일괄처리 되어야할 때 아주 유용하게 사용할 수 있다.

 

SQL문장을 보면 더욱 쉽게 이해 될 수 있으므로 이하 설명은 생략한다.

 

MERGE INTO TABLE A       --DATA Manipulation To TABLE
USING DUAL              --Condition ON (A.EMP_NO = '값')          
WHEN MATCHED THEN           
	UPDATE SET 
    		,   
            ,  
            ,   
            ,
 WHEN NOT MATCHED THEN      
 	INSERT (      
    			,       
                ,       
                ,       
                ,       
                ,    
                );

USING문에서는 다른 테이블과 Join 을 할 수 있으며

조건을 추가할 수 있다.

 

 

Insert , Delete , Update는 아주 중요한 일이므로

테이블간의 Trigger 생성하여 활성화 함으로써 

데이터의 움직임을 감시 및 추적 할 것을 추천한다.

자바와 스프링(Spring) 개발을 진행하다 보면 메서드와 클래스 그리고 변수들 앞에

@GetMapping("searchResult") 이런 식으로 쓰는 경우가 있다. 어노테이션은

JEE5(Java Platform, Enterprise Edition 5)부터 추가된 것인데 어노테이션으로 인해 코드가 깔끔해지고

외부에 설정파일(서블릿등 각종 리소스들)을 없애고 개발의 생산성을 올려준다.

여기서 다루는 내용은 SpringBoot에서 실무에서 쓰는 어노테이션이다. 

Mapping Set
@RequestMapping({"/master","current"})

 



-메서드에서도 받을수있지만 클래스앞에 선언하여서 
메서드에서 맵핑정보의 중복을 줄일수있다. 클래스 앞에 선언하게 되면 맵핑정보로 날라오는 모든요청을 클래스에서
받아서 처리할수있게 된다.하지만 메서드 타입 선언을 같이해주어야하고 옵션값을 설정해주어야해서 메서드앞에
쓰는건 비효율적이라고 생각이 든다.
@GetMapping("/edit/{id}")


-메서드앞에 선언해서 쓰고 리퀘스트 맵핑정보 뒤에 오는 
맵핑정보를 선언하여 써준다.뒤에 저런식으로 화면에서 
보내주는 변수도 받을수 있다.

@PostMapping("/edit")


-포스트맵핑 같은경우에는 보안적인 측면에서 Get보다 좋다고 하는데 URL에는 안들어가지만 데이터에 들어가서 클라이언트 측에서 볼수있다. 유출되면 안되는 데이터 같은경우 따로 암호화처리를 하는게 좋다.실무에서는 데이터베이스에
들어가는 데이터 같은경우에는 Post방식을 대부분
사용한다. 그리고 데이터(파일,이미지등)은 포스트 방식으로 받아야한다.
-Get,Post 맵핑은 단번에 무슨요청인지 알수있어 가독성이 좋다. 
ex)

@RequestMapping("/manager/item")
public class ManagerController

@PostMapping("create")

public String createAction

@GetMapping("edit/{boardCode}")

public String edit(@PathVariable("boardCode"String boardCodeModel model

 

DI Set
@Controller @Service  @Mapper @Autowired
-클래스 레벨 앞에 선언해주는 어노테이션이고 이렇게 선언하면 스프링에서 의존성을 관리해준다.
@Controller("masterController")
이런식으로 클래스명 뒤에 따로 네이밍을 부여할수도 있지만 부여하지않으면 자동으로 클래스명으로 빈이 등록된다. 
@Autowired 의존성을 주입받을수있다.

@Controller
public class MasterController
-Service Mapper 동일.

@Autowired
private MasterService Service masterService;




@RequestParam

처리방법.
화면(JSP)에서 호출방식 1)
$
.post('/com/master/master-count', {'month' : 1 }, function(resp)


2)
var
 param = {"id" : '${master.id}'}
$.post('${requestContext.managerUri}/delete-master', paramfunction(response) 

자바 처리

1)  
public JsonView masterCount(
@RequestParam(name = "month"defaultValue = "0"int month)

@RequestParam("month") int month)
@RequestParam( value="month",
required=falseint month)


2)

public JsonView deleteMaster(@RequestParam(name = "id"long id) 

 

-name든 value든 뷰에서 셋팅한 값을 적어주면 데이터를 정상적으로 받아온다. 그리고 선언안했을때에도 변수명과
키값이 동일하면 데이터는 정상적으로 받아온다.
세가지 차이점은 없는걸로 보인다. 
required=false,
defaultValue = "0"

required : 이값은 옵션값인데 필수값이 아닌경우 false로 해서 값이 안날라오더라도 에러없이 처리해준다.

             

@ModelAttribute

처리방법
화면(JSP)에서의 호출방식. <form:form modelAttribute="masterVO" action="${requestContext.requestUri}"
method="get">
자바 처리 public String list(@ModelAttribute("masterVO") MasterVO vo)
-화면에 일반 태그 네임값이나 JSTL(form) path 이름이 VO객체에 있어야 자바단에서 받아서 
처리가 가능하다.

 

'JAVA' 카테고리의 다른 글

1대다 JSP 파일업로드  (0) 2020.06.28
2025년 SAP ERP 지원중단  (0) 2020.06.26
마이바티스(MyBatis) 실무활용  (0) 2020.06.24
Orange For Oracle PL/SQL Guide  (1) 2020.06.16
서블릿 정리  (0) 2020.02.16

개념 :  클라이언트가 요청을 하면 그에 대한 결과를 다시 전송 해주는 역활.

 

특징

1) html 을 사용하여 요청에 응답한다.

2)클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트이다.

3)Java Thread를 이용하여 동작한다.

4)HTML 변경시 재컴파일해야 하는 단점이 있다. 

5)HTTP 프로토콜 서비스를 지원하는 Javax.servlet.http.HttpServlet 클래스를 상속받는다

UDP 보다 속도가 느리다.                                                                                                                                                                                                                                                                                                                                             
서블릿 라이프 사이클의 이해

 

init()

최초실행시 1회만 실행

 

doget()

호출될때마다 실행

 

destory()

서버종료될떄 1회만 실행


-> 서블릿 생명주기라고도 하는데. 이것이 중요한 이유는 서블릿에서 소스를짜면 
    필요한 작업을 해당하는 메서드의 생명주기를 이해한 상태에서 코딩을 해야한다.

 

서블릿

ServletConfig

-->각각의 서블릿을 객체모델링. 서블릿개수당 1개씩있음

initparam 정보를 가지고있는 객체임.

 

 

ServletContext application

--> 톰캣켜지면 딱한개의 객체가 만들어진다.

context-param 정보를 가지고있는 객체임.

 

반드시 알아야하는 Request , Response 개념

뷰에서 받아오는 Request 

뷰로 전송하는 Response 

서버와 클라이언트를 왔다갔다 하는 이개념이 상당히 중요하다.

 

한글을 전송 하려면 서버에서는  뷰로 보내는 Response 를 처리해야하고

E)response.setContentType("text/html; charset=UTF-8");

 

한글을 받아오려면 Request를 처리해줘야 한다.

E)request.setCharacterEncoding("utf-8");

 




서버에 저장하는 방식

서블릿은 일반적으로 프로젝트에서 컨트롤러로 쓰인다.

여기서는 서버에 저장되는형식은 다음과같다.

  자바소스, 명령어 소멸시기 어떤데이터를 사용하나?
pageContext.setAttribute("pageContext", "aaa");

<%=pageContext.getAttribute("pageContext")%>
-현재페이지에서만 저장된 값을
얻을수 있다.

request.setAttribute("request", "bbb");
 

<%=request.getAttribute("request")%>
-다음페이지에 가면 소멸

-
포워드이용하면 다음페이지까지는
전달가능
MemberJoinAction.java
MemListoinAction.java
session.setAttribute("session", "ccc");
 

<%=session.getAttribute("session")%>
-웹브라우저 닫으면 소멸. -LogID
ex)로그인했을때 남아있는
  사용자정보
application.setAttribute("application", "ddd");
 

<%=application.getAttribute("application")%>
-모든사용자가 공유
-서버 꺼지가 꺼지면 소멸.
 

 

여기서 내가 지금 현재 프로젝트(BgfRetail)에서 적용하는걸 찾아봤는데.

세션에 적용시키는건 많이있는거 같은데 그보다 하위영역에 셋팅하는로직이 많이없다.

세션값을 가지고 오기위해선 reuqest 객체가 필요하다.

 

session = request.getSession(true); 

세션일 얻어온다음에

session.setAttribute(FrameworkConfig.getWebSessionKey(), userInfo); 
session.setAttribute(FrameworkConfig.getWebSessionUserId(), userInfo.getUser_id()); 

이런식으로 서버 컨트롤러(서블릿)에서 셋팅을 해주는데.

보통 로그인정보 인증정보등 프로젝트 전반에 필요한 정보들은 세션에 저장해두는게 좋다.

 

 

 

 

셋팅이 되있으면 뷰에서는 

(UserInfo) session.getAttribute(FrameworkConfig.getWebSessionKey());

이런식으로 세션에 셋팅된 키값으로 화면에서 이런식으로 가지고와서 쓸수있다.

 

 

 

 

 

                                       

+ Recent posts