개발 공부/WEB

Mybatis

공부하는개발자_ 2023. 8. 2. 14:37

 

 

return false를 하지 않은 경우 기본 이벤트 처리하러 감 

=>href url처리하러..

 

 

service ( ) : 요청방식과 무관. 요청시마다 호출되는 메서드. 요청방식이 get/post인 경우 자동호출됨. 구분하고 싶지 않은 경우 service( ) 오버라이딩 하면 됨. 

 

 

 

nio 패키지 : 입출력보다 확장된 패키지. 출력에서 제공되지 않던 path에 관련된 라이브러리 제공해줌.

contentType // 다운로드 할 파일의 형식

ex) 이미지/png, 이미지/jpg

String contentType = Files.probeContentType(path);

파일의 형식을 찾으려하다보니 path인자가 필요함.

 

 

 

첨부파일로 무조건 다운로드를 할 경우 : attachment

 

 

 

 

응답파일 내용을 파일로 만들어주어야 함 => URL.createObjectURL

 

1 ) 이미지 객체 src속성값은 형태가 문자열 형태로 정확한 리소스 경로 주는 방법

2) Blob 설정 : 문자열이 아닌 파일 타입

 

이미지다운로드 링크를 누르면 ajax요청. attach형태로 첨부되어 클라이언트가 쓰게 할 것이아니고 무조건 응답 받게 함.

응답형식이 이미지파일 형식으로 응답되어야 함. 이미지 파일의 내용을 js에서 설정할 경우 반드시 blob으로 설정해야 한다.  

 

 

 

logo.png파일이 있어야 함

 

 

inline : 응답내용을 그대로 응답해라

 

 

 

이미지 특정영역에 보여주고 싶은 경우

inline으로 content-disposition을 설정 후 ajax를 요청하고 blob으로 요청. 

 

 

 

썸네일 파일 만들기

이미지 파일 요청을 하면 톰캣에서 파일을 찾아 읽고, 그대로 응답하도록 되어 있음.

큰 파일은 응답시간이 오래 걸림. 원본파일은 원본파일대로 있는 상태에서 업로드할 때 썸네일파일 만들도록 권장함. 

라이브러리 쓰도록 권장. 렌더링 시간이 빨라지고, 네트워크 비용을 줄일 수 있다.

 

 

왜 톰캣 서버와 무관한 디렉토리에 파일 관리를 하는가?

war파일에 경로들이 들어가게 되고 톰캣에 갖다놓으면 압축이 풀림.

톰캣과 무관한 attaches에 관리를 하는가? 

 

 

배포된 프로젝트 경로 밑인 att폴더에 첨부파일들이 저장되는 경우, 다운로드를 어렵게 할 필요가 없다. 

아래와같이 쉽게 할 수 있음. 

<a href-"attr/a.txt">파일 다운로드</a>

<img src="attr/large.jpg">

 

 

그런데 왜 이렇게 안하는가?

개발자가 새로 배포하면 톰캣 서버에 기존 프로젝트는 없어짐. 새로 war파일을 만들어 배포.

이전에 업로드 됐던 파일들은 초기화 되어 사라짐. 프로젝트 내 경로로 업로드 하지 말라!

주로 첨부하는 목적은 서버에 오랜 기간 저장하려고 첨부하는 것이다.

사용자가 매번 들고다니기 어려우니 서버에 기억시키기 위한 것이다. 

 

 

데이터 서버를 따로 두고 관리를 따로 해주어야 함

 

 

파일을 삭제해야 하는 경우
고객이 탈퇴하고 게시글 삭제하면 업로드된 첨부파일들도 제거 되어야 한다. 

 

 

 

코드가 변경될때 마다 재컴파일 하지 말라. 중단해서 배포하기 까지 시간이 많이 걸림. 무중단배포

repository / xml 따로 두고 라이브러리 mybatis를 사용! 

sqlsession이 db연결 담당 . xml을 연결해서 사용가능.

 

 

 

sql이 틀린경우 repository코드를 재컴파일 할 필요 없이 xml에서 sql구문만 변경해주면 된다!

 

 

Mybatis

persistence : 영속성/지속성 유지 (엔터티 값과 객체가 동일 값을 유지하는 것)

 

무엇을? 객체와 엔터티가 연결이 계속 유지되는 것. 

객체는 엔터티의 정보로 채워져있다.

객체 멤버변수 값이 바뀌면 엔터티가 바뀌고, 엔터티가 바뀌면 객체도 바뀌는 구조

 

엔터티가 삭제되면 객체도 사라짐.

 

 

객체가 만들어지면 만들어진 객체 내용대로 영속성을 유지해야 하니 행 1개가 추가됨. 

 

 

객체를 없애면 행도 사라짐. 

=> 완벽한 persistence프레임워크: SQL구문을 안 써도 된다! (하이버네이트)

 

 

하이버네이트 : join때문에 사용하기 어렵다.

4개의 테이블을 조인할 객체가 되려면 클래스와 클래스 사이에 has a 관계여야 한다.

주문자가 주문번호, 주문일자, 수량, 상품번호, 상품명, 가격정보..

 

 

 

MyBatis : SQL구문을 따로 관리해줌. 하이버네이트보다 설계가 잘 되어있지 않다해도 사용가능.

 

 

mybatis 라이브러리 다운

 

 

 

 

SqlSessionFactory에서 어느 db와 연결하고 xml을 사용할지 정보가 필요해서 xml파일 하나 더 필요.

mybatis-config.xml을 사용해서 어떤 파일을 사용할지 정해두는 것.

 

 

 

session이 db와 연결 담당. select작업을하려면 select( ) 호출

1) session.selectList ( ) : 여러 행 검색할 때 

2) session.selectOne ( )  : 결과를 한 행만 검색할 때 

결과 수신되면 select한 결과 값 반환.

고객의 c타입 객체를 만들어  id값, pw , name 값을 반환해줌. 검색객체가 없는 경우 null로 반환

 

 

 

mybatis사용할땐 auto commit이아니기때문에 commit해주어야함

 

 

 

 

parameterType이 String인 경우 값을

'개발 공부 > WEB' 카테고리의 다른 글

URI와 웹 브라우저 요청 흐름  (1) 2024.01.05
인터넷 네트워크  (0) 2024.01.04
싱글톤패턴/ 파일 업로드  (1) 2023.07.19
session / MVC  (1) 2023.07.14
Session Tracking : 상태 정보 유지기술  (0) 2023.07.13