//예 : find + (Entity명-생략가능) + By + 속성명(컬럼명, 전역변수 이름)
findByWriter
findByWriterAndTitle
//메소드 이름이 곧 쿼리문
@Transaction //delete from board where writer = ?(파라미터 값)
int deletBuWriter(String writer)
등가비교 : Is, Equls / IsNot, Not / Null, IsNull
대소비교 : LessThan / GreaterThan / +Equal(이상, 이하)
날짜비교 : InDateBefore / InDateAfter
와일드카드 : LIKE,NotLike(인덱스 사용 불가) - findByTitleLike(String Title)
StartingWith /
정렬 등 아래 링크 참고
동기적인 방식은 작업이 순차적으로 실행되며, 한 작업이 끝날 때까지 다음 작업이 시작되지 않습니다. 전통적인 웹 페이지 요청과 응답은 동기 방식으로 동작합니다.
비동기적인 방식은 작업이 병렬적으로 실행되며, 한 작업의 완료 여부와 상관없이 다음 작업이 시작됩니다.
Ajax나 Fetch API를 사용한 파일 업로드는 비동기 방식으로 동작하며, 페이지 전체를 새로고침하지 않고도 데이터를 서버로 전송할 수 있습니다.
React에서의 비동기 처리는 주로 'fetch, axios'를 사용함.
Form 전송은 기본적으로 동기적인 방식으로 동작하며, 전체 페이지를 새로고침하게 됩니다.
enctype="multipart/form-data"
속성을 추가하여 파일 전송을 활성화합니다."
Ajax를 사용하는 경우 JavaScript로 비동기적으로 파일을 전송할 수 있습니다.
파일 전송 시에 contentType: false
와 processData: false
옵션을 주어야 하며, FormData 객체를 생성하여 데이터를 전송합니다.
@GetMapping("fileDownLoad2")
public ResponseEntity<Resource> fileDownLoad2(@RequestParam(value="filename") String filename) {
logger.info("imageDownload 호출 성공");
try {
File file = new File(config.getUploadPath(), URLDecoder.decode(filename, "UTF-8"));
HttpHeaders header = new HttpHeaders();
header.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="+filename);
header.add("Cache-Control", "no-cache, no-store, must-revalidate");
header.add("Pragma", "no-cache");
header.add("Expires", "0");
Path path = Paths.get(file.getAbsolutePath());
ByteArrayResource resource = null;
resource = new ByteArrayResource(Files.readAllBytes(path));
return ResponseEntity.ok()
.headers(header)
.contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(resource);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}// end of fileDownLoad
필터 사용(https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
백틱, EL($()) ->역슬래쉬 필요! 둘의 표현법이 겹침
첨부파일 추가에서의 어려움, 동기처리에 대한 부분 어떻게 해결??
메모이제이션(useMemo, useCallback - 함수, 변수에 다 적용 가능함)
프롭스 주의!! : 상위에서 하위 가능, 하위에서 상위 불가능
prop 사용시 : 상위에서 하위의 방향만 가능
변수에도 메모이제이션 가능, 계속 유지, 반영해야할 때 오늘 실습처럼 변수에 저장을 시킨 뒤 넘겨서 넘긴 곳에서 푸쉬하고 반영할 수 있도록 작업하는 것 필요함.
useState의 첫번째 인자를 넘기게 되면, 동기화되지 않음. 깊은 복사와 같은 느낌
그 해결방법은 변수에 넣고, handle
useMemo, useCallback 사용 !!
const modules = useMemo(
() => ({
toolbar: {
// 툴바에 넣을 기능들을 순서대로 나열하면 된다.
container: [
[
{ header: [1, 2, 3, 4, 5, 6, false] },
{ color: [] },
{ align: [] },
{ background: [] },
],
["bold", "italic", "underline", "strike", "blockquote"],
[
{ list: "ordered" },
{ list: "bullet" },
{ indent: "-1" },
{ indent: "+1" },
],
["clean"],
["link", "image"],
],
handlers: {
// 위에서 만든 이미지 핸들러 사용하도록 설정
image: imageHandler,
},
},
}),
[imageHandler]
);