<오늘>
1. 페이징,검색기능
2. mybatis
validator프레임웤
검증하려면 controller, service, dao에서 다 검증해야됨. 넘어온 데이터 믿을 수 없어서
-> 일일히 다 검증하지 말고 검증대상인 데이터를 가지고 있는 VO에서 체크를 한다.
페이징처리
1. screenSize, totalRecord이용해서 totalPage 계산
(totalRecord+screenSize+9)/screenSize
2. blockSize는 고정. currentPage가지고 startPage, endPage
startPage = (currentPage-1)/blockSize*blockSize+1
endPage = startPage+blockSize-1
rownum은 동적으로 만들어지는 의사코드.
쿼리문 실행-from -where-select
-> where절에서 아직 만들어지지 않은 데이터를 쓰려고 하는것 => 결과 안나옴
=> 인라인뷰 사용.
정렬하고 id부여
망한코드
1. jsp에서 자바코드 많음 디자이너와 협업 어려움
2. 회원관리에서만 페이징처리 가능
-> 제네릭
namespace는 반드시 인터페이스의 퀄러파이드네임으로 줄것! 그래야 mybatis가 메서드들 찾을 수 있음.
ibatis는 null값 알아서 ""로 넣어줬는데 Mybatis는 그게 안됨. VARCHAR의 널값인지 VARCHAR2의 널인지 타입을 몰라서
->jdbcType써서 null처리 해주기
뭐에 들어갈지 모르니까 그냥 다 넣는다.
하지만 실행하면 수정안됨-쿼리문실행하고 바로 롤백해서
autoCommit()을 하거나 직접 커밋할 수도 있음.
코드 프레그먼트. 코드의 일부분을 작성해서 필요한 곳에서 가져다 쓸 수 있는 것
OGNL표기법
@다음 클래스명@메서드명하면 자바 코드처럼 쓸 수 있다.
회원정보와 회원이 구매한 구매목록도 조회하라
상품을 구매했을 수도 있지만 없을수도 있다 -> outer조인 해야됨
하지만 오류남
CLOB에 대해 중복 판단 하려면?
하지만 중간에 인라인뷰 있으면 가독성 떨어짐
-> 인라인뷰 모아놓는것 - WITH
member-prod 테이블 사이의 관계
1 대 n
-> VO에 적용하면
1대1 - has a
1대n - has many
resultType - MEM_ID ~ 값들을 소문자로 바꾸고 SET붙여서 Mybatis가 setter처럼 리플렉션 하는것.
하지만 두개 이상 테이블 조인하면 하나의 VO로 바인딩할 수 없음
=> resultMap사용해서 수동으로 바인딩해야됨.
원래는 result이후에 써준 것처럼 속성 일일이 바인딩해야되는데 autoMapping주면 저 규칙성에 의해 자동으로 바인딩해줌
그 안에 들어가는 PagingVO도 마찬가지로 autoMapping 해주면 일일이 안써줘도 됨.
회원은 한명인데 구매한내역은 여러개일 수 있음 - 그렇다고 MemberVO를 여러개 만드느냐? 그건아님. MemberVO는 하나인데 그 안에 들어가는 ProdVO가 여러개인 것 -> 같은 회원인지 구분할 수 있어야됨 -> pk로 구분 - VO equals => id속성으로 묶기.
식별성 있는 데이터 -id
식별성 없는 데이터 - result
id가 같으면 또다른 VO만들지 않는다.
List< Prod> -> javaType으로 큰 타입 잡고 ofType으로 작은타입 잡아준다.
위 코드 보면 맵안에 또 맵있음 -> 네스티드 맵이라고 한다.
< - 태그랑 혼동되서 에러남.
CDATA이용하면 이스케이프문자 사용 가능하다.