https://developyo.tistory.com/237
<<이해가 좀더 되었다!!!
@Query붙이는것 = JPQL이었구나~~
JPQL은 일반적인 jdbctemplate쓰는거랑 좀 비슷한 방식으로-
쿼리생성팩토리를 만들고 String을 짜붙인다음 implements해서 실행!!
Querydsl은 자바코드로 짠다!!
https://developyo.tistory.com/237
<<이해가 좀더 되었다!!!
@Query붙이는것 = JPQL이었구나~~
JPQL은 일반적인 jdbctemplate쓰는거랑 좀 비슷한 방식으로-
쿼리생성팩토리를 만들고 String을 짜붙인다음 implements해서 실행!!
Querydsl은 자바코드로 짠다!!
1. jparepository 상속->page랑 sort어쩌구 repository ->crudrepository
따라서 jparepository만쓰면 . 웬만한 메소드 다 사용할수있음
2. Pageable(인터페이스)을 PageRequest 객체가 구현. 생성자에 뭘넣느냐에 따라서 Sort도 가능
3. Sort : asc, desc지원.
4. 의문점??
Sort의 생성자나 .. jparepo의 메소드안에 개발자가 정의한 객체의 프로퍼티명.. 쓰는 경우- 이거 어떻게 돌아가고 있는거지.... 메소드를 구현 안했는데 extends하는것만으로돌아간다고?? (대체 어떻게???!!)
5.
https://parkhyeokjin.github.io/jpa/2019/11/07/JPA-chap9.html
<<<우와!!! 대단한걸발견했다....
@embeded이거 물건이네 물건이야... 우와우와우와 이런 코드 짜고싶어!!!!우와!!!
마이바티스에서 resultmap으로 넣고넣고 하는거랑 쫌 비슷한거같기두?
우와!!! 컬렉션도 이렇게 쉽게....일대다맵핑을 이렇게 쉽게........
마이바티스에서 꼬짝꼬작 고생했던 나의 세월들이 떠오른다....우와... 이런방식도 있구나. 신선해!!
6. 의문점??
아니 interface를 상속하는데.. 어떻게 이 쿼리가 만들어지고있는거야? 구현 클래스가 없잖아...??에엥...? 그냥 그런갑다~~하고 막 파라메터넣구~~ 막.. 써도 되나?
7. spring data jpa에서 동적쿼리문제해결책
1) JPQL이용 : jdbctemplate이랑 비슷한 문법. string으로 쿼리만들고. 리턴타입클래스넣어주고 . how 방식의 기술.
2) Querydsl이용 : 보다 object지향적인 문법(?) . 메소드체인 등. what을 기술하는 느낌. 명확하다는 장점.
https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
<<개념이 혼란스러웠는데, 잘 정리가 되었다.
김영한님의 강좌에서- entitymanager를 직접 이용해서 구현하시길래. 왤까? 뭘까? 하고 생각했는데. 결국jparepository는entitymanager를 쉽게 이용할수있도록 spring이 추상화해놓은 것이군!! 스프링은참...뭐랄까..똑똑해...
근데 이런 추상화된 클래스를 사용할수록- 나는 어디까지 알아야하나? 하는 생각이 든다. 이 원리를 완벽히 이해하는건 아니더라도 어느정도는 알고써먹어야하지않나. 너무 스프링에 의존해버리면 - 다른 기술에 약해지니까.
결국 디자인패턴공부가 더 필요하다는 생각이.. 계속드네. 공부를 할수록 java자체 - 아니 객체지향자체를 공부해야한다는 생각이 든다!!
jsp에서 스크립트릿으로 쓰니까 자꾸 오류나는게 답답해서!!
그냥 제이쿼리로 아예 함수를 만들었다.
each로 각각 돌리면서 val과 같으면 selected attr를 추가해준다!
하고 나면 쉬운데, 할때는 뭔가 끙끙대기도 하고.
그런 과정이 즐겁다! 속 시원해~!! 후후~~
아아 JSTL이라도 쓸수있으면 편한데... 언제 이 스파게티 코드들 수정한단말인가아.
어떤식으로 학습진행하실 생각이신걸까~~ 후우아.
좀더 추상화된레벨의 코딩하고싶어. ㅜㅜ 내안의코딩혼이 엉엉운다..
1. 순수 자바스크립트로 하기
opener.뭔가의 폼이름.뭔가의input이름.value=값
2. jquery로 하기
$(opener.document).find(뭔가의이름).find(~)...val(값)
3. 근데 opener쓰면 .. 모바일에서 안보이니까... 웬만하면 modal창으로 처리합시다!! 그래도 하는방식정도는 알고있어야 하겠죠!
4. 오 신기하다.. function도 배열로 여러개 넘길수있구나... 신기하다..
근데 나라면(?)굳이 이렇게 나열안하구 일단 이름만 준다음에 따로 빼구싶음!!
function DaumPostcode() {
// 현재 scroll 위치를 저장해놓는다.
var currentScroll = Math.max(document.body.scrollTop, document.documentElement.scrollTop);
new daum.Postcode({
oncomplete: function(data) {
// 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
// 각 주소의 노출 규칙에 따라 주소를 조합한다.
// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
var fullAddr = data.address; // 최종 주소 변수
var extraAddr = ''; // 조합형 주소 변수
// 기본 주소가 도로명 타입일때 조합한다.
if(data.addressType === 'R'){
//법정동명이 있을 경우 추가한다.
if(data.bname !== ''){
extraAddr += data.bname;
}
// 건물명이 있을 경우 추가한다.
if(data.buildingName !== ''){
extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
}
// 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다.
fullAddr += (extraAddr !== '' ? ' ('+ extraAddr +')' : '');
}
// 우편번호와 주소 정보를 해당 필드에 넣는다.
document.getElementById('zipcode').value = data.zonecode; //5자리 새우편번호 사용
document.getElementById('address1').value = fullAddr;
// iframe을 넣은 element를 안보이게 한다.
// (autoClose:false 기능을 이용한다면, 아래 코드를 제거해야 화면에서 사라지지 않는다.)
element_wrap.style.display = 'none';
// 우편번호 찾기 화면이 보이기 이전으로 scroll 위치를 되돌린다.
document.body.scrollTop = currentScroll;
$('#address2').focus();
},
// 우편번호 찾기 화면 크기가 조정되었을때 실행할 코드를 작성하는 부분. iframe을 넣은 element의 높이값을 조정한다.
onresize : function(size) {
element_wrap.style.height = size.height+'px';
},
width : '100%',
height : '100%'
}).embed(element_wrap);
// iframe을 넣은 element를 보이게 한다.
element_wrap.style.display = 'block';
}
다음 오픈api 주소검색. 저 oncomplete: function()~~~이거 뭐지? 하고 생각해봤는데 배열로 function넘긴거였다. 자바스크립트 문법은 JSON식이니까~
1. href에 자바스크립트 함수 바로 쓸수있다.
2. 값을 넘겨줄때는 "+ 변수명 + "으로.. 좀 꼬질꼬질(ㅎㅎ;) 연결해야함
3. if문 이용해서 메뉴의 보이기 숨기기 할수있다.
4. 세션과 쿠키 이용해서 자동로그인 기능 구현가능.
좀더 보안을 향상해서. 쿠키에 세션 아이디 보내기 + DB테이블에 세션아이디 및 세션만료일 컬럼 추가. -> 사이트 접속시 request에서 쿠키 받아서 데이터베이스에서 User객체 찾아오기. 쿠키에 바로 userId저장하고 해도 되긴하는데.. 브라우저측에 전달하기보다는 서버에 전달하는편이 보안에 낫다. 세션Id는 유일키이기 때문에 세션아이디만 전달해도됨. session.getId()할수있다.
5. 세션 names 기억하기 힘들기 때문에( 나중에 가면 뭘 세션에 넣었더라.. 하게된다.. 바로 나다!!! ㅋㅋㅋㅋㅋ) 따로 Utils에 static final string으로 적어두자...
6. javascript length : array에 쓰면 해당 array요소개수출력. string 에 쓰면 해당string의 글자수 출력.
!obj 로 null, "", undefined다 걸러낼수있다. 좋은거 배움!!
7. String 으로 된 값 javascript함수에 넘겨줄때: "" ""두번...써야하는... 꼬질꼬질이~한 코딩이될수있다 ㅎㅎ; 뭔가.. 좀더 스마트한 방법없을까... 흑흑. object타입이 아니어서. 흑흑흑.
1. 트래픽 . 짧은시간에 접속자가 늘면. 서버에 이상이 생길 수도 있음
아무리 좋은 서버를 구축해놓아도. RAM에 과부하가생길수있기때문임
application. session. request
application - 서버전체의RAM공간? 같은느낌
2. cookie는 사용자pc에 저장. 메모장파일? 사용자가 열 수 있음.
1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다. - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다. - 마지막에 w를 해야 실제로 반영이 된다. 3. mkfs를 하여 어떤 파일시스...