언더라인을 이용해서 구분... 하면 매핑된 정보가 안들어갈 수 있다?
지금 mySql에서 wirtierId -> witer_Id 로, regdate ->reg_date로 바꿔봤다.
그럼 전에 잘 되던게 안 됨
매핑이 안 됨.
- 테이블은 reg_date, writer_Id
Notice에 적은건 regdate, writedId라서
<resultMap> 컬럼을 맞춰주는 역할
이거 결과봐야함
-> 선생님이 테이블명 바꿔서 확인 못하겠는데ㅜ noticeDao <init> 이라고 에러 한 줄이 있었음
-> 매핑 안해주니 바로 결과 실행됨...
근데 select - resultyType에만 가능
Q. parameterType은 어떻게 할까
//
웹페이지에서 '글쓰기' 누르기 -> 에러
예견된 에러
writer_id가 존재하지 않으니
애는 굳이 안맞춰줘도 된다.
-> 넣어줄 컬럼명은 바꾸는게 맞음.
우리가 사용하는 변수명들은 #{writedId}는 내 마음대로인거지 :)
//
MySql 명명 규칙
- 테이블명은 소문자
- 컬럼명은 처음을 대문자로 시작
(선생님은 이 규칙 싫어하셔서 그냥 자바처럼 이름 쓰시는거라고 함)
-> 그래서 지금 테이블명을
사용자가 전달하지 않았으면 빼고 싶은 거
기본값을 넣고 싶을 때라거나
뭐는 넣었으면 좋겠다 / 뭐는 뺐으면 좋겠다.
만약 사용자가 "" 아무것도 검색을 안할 때 -> where절을 빼는게 좋나? 그냥 안빼는게 좋나?
-> 레코드를 훓으면 실행 속도에 영향을 미치니 굳이 껴놓지 않아도 된다.
1) 전달된게 없으면 빼보려고 한다.
2) page가 전달 될 수도, 안 될수도
cf) jpa vs myBatis
-> jpa는 한 단계 더 나아간 프레임워크 / 쿼리까지도 내가 작성할 필요 없게 만든 프레임워크
hybernate?가 1등인데 설정이 복잡해서 jpa(설정 간단하게 해줌)를 '같이' 쓰는 현황
-> 규모가 큰 곳에서는... 쿼리가 복잡해지면 '내가 원하는대로' 안만들어질 수 있어서 다시 돌아오는게 myBatis
// '페이저'를 구현해보자
구글링 : mysql pageing query
mySql에서 쿼리문을 먼저 실행해보자
- Notice에서 10개를 가지고오는
1페이지는 -> LIMIT 10 OFFSET 0; (건너띄지 않고 10)
3페이지는 -> LIMIT 10 OFFSET 20; (20개 건너띄고 10개니까 3페이지가 되는것)
근데 xml에서 계산 불가능
활용하는 서비스쪽!에서 책임을 지는게 맞다.
- 화면에서 1,2,3... 페이지를 해결하는 아이.
- 그리고 그 페이지를 가지고 '다오야 이 페이지 줘'라고 하는건 폭력적
몇 페이지부터 몇 페이지까지라고 요청해야
-
서비스는 이렇게 offset, size를 주도록!!!
그동안 다 page로 만들어서 이렇게 오류날 것
-> 그간 page로 했던거 다 고쳐주기.
// xml은 이제 해보자 (지금은 하드코딩으로 limit 10 offset 0으로 해줬음)
//
'작성일' 정렬을 할 수 있도록 하는 서비스 하나를 넣어보자.
오버로드에서는 dao 하나만!
- 뭔가 큰 형이 가장 많은 부담을 지니는 느낌적인 느낌...?
//
mybatis '동적쿼리'
field가 있을 때만! 저 쿼리가 실행되도록 해주었다. (이런 것이 바로 동적쿼리~~)
// 그런데 myBatis가 일하는 모습(?)을 보기 위해 (myBatis가 어떤 쿼리들을 실행했는지 확인하자는 것)
지금 왼쪽 맨 위에 NoticeController에서 (1, title, "") 이라고 디폴트값을 줬잖아?
-> 확인해보자!
(1) xml에서 Mybatis가 field가 있군~! 이라면서 21번째줄을 실행하는지
(2) 그리고 NoticeController에서 디폴트 값으로 준 거 지운 다음에는, Mybatis가 field가 없군~! 이라면서 21번째 줄을 실행하지 않는지! 이렇게 똑똑하게 일처리를 잘~ 하고 있는지를 알아보자.
이 노란색 한 줄만 적어주면 됨!
error -> 에러 발생한 부분이 출력이 될 것
info -> info 여기에 해당되는게 출력되는 것
.
.
trace -> 실행되는 과정에 있는 로그를 출력
쿼리문. 인자 ? ?
10, 0 받아서
아래 10개의 반환값이 이렇다~
// 자 이제 연습해보자!
//
xml 파일 가지고 이야기하는 것
근데 쿼리가 복잡해지면 <if>로 해결이 안 됨
ex) and해서 다른 컬럼하고 비교한다고 해보자.
-> 앞에가 조건처리 되서 빠지면, where 없이 and가 갑자기 와버리는 상황이 발생할 수도 있는것
이런건 쿼리식에서 없는거지... 문제다~
-> MyBatis는 다 대안이 있지 :)
조건 중 한 개만 참일 경우
-> <where>가 저절로 where 없는 곳에는 where 넣어주고, 뒤에 and 지어주고 역할을 해줌!
cf) 다른 방법
where 1=1 .. 꼼수인데 이건 캡쳐 안함. 독! (선생님도 비추하심)
//
<where>가 가끔 안되는 경우가 있다.. 고 문서로 써져있다고 한다.
그래서 <trim>을 배워보자.
<where>와 정말 똑같음.
그래서 <trim>을 굳이 할 필요는 없다고 그냥 적어만 두라고 하심 ㅎㅎ
cf) 저기 빨간색 포인트 -> / 아니라 | 임!!! (or 연산자)
cf) 3년차 이후부터는 '업무'가 주가 되기 때문에 그 업무를 다뤄본 사람인게 중요함.
3년차까지는 기술이 중요해서 여기저기 옮겨다니며 배워보다고 해도 3년 뒤부터는 '업무'. 어디를 이직하고 싶을 때는 그 때는 그 업무를 배워본 상황이어야. 그래서 업무를 선택할 3년 뒤 시점이 중요하다. 3년차까지는 어느 업무든 기술을 익숙하게 하는게 중요.
78일 - 다수의 db 가져오기 <foreach> (0) | 2021.06.10 |
---|---|
77일 - update 할 때의 <set>, 래퍼클래스로의 변환, 파일만 주는 테이블에 id 주기 intro (1) | 2021.06.09 |
76일 - MyBatis를 활용한 DB 연결(2), Dao 구현하기 실습 (0) | 2021.06.08 |
76일 - MyBatis를 활용한 DB 연결(1) (0) | 2021.06.08 |
75일 - DI, @Autowired로 결합하는 과정 (0) | 2021.06.07 |