230607 예순 한 번째 수업_Mybatis

mary·2023년 6월 9일
0

국비 수업

목록 보기
61/72

사용자가 볼 수 있는 페이지는 모두 jsp파일임

jsp에서의 요청을 처리 할 수 있는 건 controller(Servlet파일들): 회원가입, 로그인 등

service(Interface, Implement 등): Servlet에서 한 것을 실행해줌

프로그래밍해서 데이터베이스와 연동해주는 Dao: insert와 같은 DML을 프로그래밍

vo에 들어있는 Bean파일: 받아온 데이터들을 담는 곳, 있을 수도 있고 없을 수도 있음 반드시 필요해서 사용해야하는 파일은 아님.

점선: DB에서 응답을 받아서 다시 최종적으로 사용자에게 보여줌


jsp파일: html(JQuery, CSS) + java를 모두 할 수 있는 것, DB랑 연동하여 사용자에게 보여주는 역할

역할을 나눠주려고 jsp는 java + html만, Mybatis에서 DB 연동을 담당하고 언어를 java로 하는 게 아니라 xml로 프로그래밍을 함.

두 개로 나눠서 관리함

config라는 xml이 루트가 돼서 긴 이름에 별칭을 넣어준다든지, xml이랑 연동해야되는 xml들이 있으면 그 xml들(맵퍼들)이 어디있는지 위치 찾기, 어떤 DB 프로그램을 쓰는지(Oracle 또는 MySQL 등) 설정해줌 => DB설정 파일이라고 보면 됨

실제로 insert,select 구문을 쓰는 건 mapper에서 함 => 실제 SQL문 쓰는 파일이라고 보면 됨

원래 저 초록 부분을 servlet에서 했었는데 지금은 나눠서 하는 것임. 왜냐?
interface를 사용하면 통일을 하기 용이함.
팀이 여러개로 나뉘었을 때 구현하고 싶은 메소드가 있으면 interface에서 메소드명이 같은 걸 사용

각 팀마다 Dao에서의 객체가 여러개로 달라도 interface를 사용하면 명칭이 같아서 비슷한 기능을 구현하려면 그냥 객체만 추가하여 interface와 연결해주면 손쉽게 사용 가능


패키지를 여러개로 나누는 이유는 유지·보수가 용이하게 하기 위해서 하는 것임.
어떤 기능에 오류가 났을 때 해당 패키지 부분만 보고 찾아 수정하면 되기 때문에 성질이 비슷한 파일들끼리 모아 패키지로 분류하여 넣어놓은 것.


생성자를 만들어서 값을 넣어줘도 되고(주석처리 되어 드래그한 부분)

객체 생성(M이라는 Bean에 넣어줌) 후 각각에 맞춰 값을 넣어줘도 됨

Impl 파일에서 생성해줬던 session을 그대로 가져와 insert를 해주고(그래그 부분)

원래 저렇게 주석처럼 해주던 것을 xml로 mybatis를 쓰다보니 Session 이용하여 한 줄로 쓸 수 있게 된 것임

insert가 잘 됐는지 반환한 결과를 int result에 넣어줌

이런식으로 구현하면 Interface, Implement 따로 안 해줘도 됨
그런데 우리는 따로 할 것이기 때문에 위의 생성자를 이용한 주석처리 부분처럼 프로그래밍 함


페이징 처리 구현할 때 변수가 원래 저렇게 많아짐. 그런데 이번엔 저것들을 Bean으로 만들어서 호출해주는 방식으로 프로그래밍 할 것임

start 번호 할 때 원래 이렇게 정렬한 걸 가져와서 rownum이라는 걸로 명명해주는 식으로 했었음


이 순서대로 갔다가 올것임

offset은 첫번째 페이지는 0
limit는 몇 페이지가 됐을 때 다음 페이지로 뛰어넘을 건지. 여기선 5

id는 resultMap 넣어주기


만약 데이터베이스에서 게시글 데이터가 하나 사라지면

이때는 그냥 구멍 뚫린 것 처럼 그 글번호 숫자가 사라지고 다음부터 시작돼서

<td>${b.boardNo }</td>

대신에

<td>${pi.totalRecord-((pi.nowPage-1)*pi.numPerPage)-s.index }</td>

넣어서 글번호가 자동 배분 되도록 함


전체적인 흐름

index.jsp에서 시작 ->

여기로 넘어감

menubar를 include하여 넣음 ->
menubar에서 로그인을 하는 jsp 구현

로그인을 하기 위해 저 servlet으로 감

앞에서 아이디와 비밀번호 값을 받아 Member m이라는 Bean파일에 넣음

implement 객체 생성하여 저쪽으로 Bean에 넣어준 아이디와 비밀번호 값이 넘어감 ->
loginMember()의 메소드 호출 ->

mDao로 이동 ->

mDao에서 호출 -> 아이디와 비밀번호 값 받아서

xml 호출 ->

데이터베이스에서 select하여 resultMap에 담은 결과 Member가 반환됨

저쪽에 아이디와 비밀번호 값이 넘어가는 것임

loginUser를 호출한 곳으로 이동

그럼 이제 로그인 할 수 있나 보고 실패하면 에러메시지 도출

로그인 값이 비어 있으면 로그인 안 한 거임

profile
내 인생을 망치러 온 나의 구원, 개발

0개의 댓글