ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (국비교육) 38 - project1 이어하기6
    개발/국비교육 2023. 7. 24. 17:12

    ■ 보드 만들기

     

     

    board 라는 테이블이 없어 오류가 뜬다.

    따라서 보드 테이블 만들어준다. 

     

     

    그러면 입력된 데이터가 없어 다음과 같이 나온다. 

     

     

    우리는 길이 검사를 하여 값이 없을 경우 안뜨게 해줄 것이다.

    이를 위해 jutl functions 태그를 불러온다. 

     

     

    fn 태그를 사용해서 length 길이 구할 수 있다. 

     

     

    리스트 값 가져올 것이 없기 때문에 길이가 0보다 작다.

    따라서 출력할 데이터가 없습니다. 라고 뜬다. 

     

     

     

    INSERT INTO board(btitle, bcontent, bwrite)
    VALUES ('말랭이 게시판에 오신것을 환영합니다.', '반가워요', '말랭이')

    게시글을 하나 넣어주니 다음과 같이 된다. 

     

     

    이제 table 에 해당하는 값을 조건식 안에 넣어서 길이값이 0보다 클 경우에만 출력되게 설정되었다.

     

     

     

    bip 가 없어서 오류가 뜬다.

     

     

    따라서 board 게시판에 bip 를 추가해준다. 

     

     

    이제 가져올 ip 가 있어서 게시판 글이 작성된다. 

     

    ■ 로그인한 사람만 글쓰기 권한 부여하기

     

     

    bwrite 를 m_no 로 조인시켜줄 것이다. 

     

     

    no action 으로 하는 이유는 해당 게시글 지워지면 사용자 지워지게 설정 안할것이 때문이다.

    cascade 는 글 삭제하면 댓글 삭제시킬 때 많이 사용한다. 

     

     

    해당 데이터 값 int 타입으로 바꿔주면 된다.

     

     

    이제 조인한 값이 나오도록 설정해준다. 

     

     

     

    JOIN 은 테이블 두 개를연결한다. 

    ON board.m_no = members.m_no 는 두 개의 조인한 m_no 의 값이 같다는 것을 의미한다. 

     

     

     

    다음과 같이 board b memers m 을 작성해서 별칭으로 짧게 사용도 가능하다. 

     

     

     

    다음과 같이 boardview 가 생성된다. 

     

     

    보드서비스 타입을 List<BoardDTO> 로 변경

     

    DAO 도 List<BoardDTO> 로 변경

     

     

    m_name 에 대한 gettet setter 도 만들어준다.

     

     

    ※ 단축키

    ctrl + shift+ r 밑에 변수 자동으로 바꿔주기 (게터세터 변수 자동변환)

     

     

    boardview에 있는 값은 m_no 가 아닌 m_name 이므로 변경해준다. 

     

     

    이제 m_no 를 m_name 으로 바꿔주면 다음과 같이 제대로 뜬다. 

     

     

    그러나 게시물을 클릭해서 들어가면 

    detail 에는 bwrite 가 없어서 오류가 뜬다.

     

     

    따라서 boardview 에 m_name 있기 때문에 바꿔준다. 

     

     

    디테일에서 m_name 으로 바꿔준다. 

     

     

    그러나 컨텐츠는 boardview 에 없어서 출력이 되지 않는다.

    따라서 하이디에서 bcontent 도 추가해준다. 

    추가는  b.bcontent 누르고 저장한다. 

     

    ※ 

    ` : 컬럼명 찍어줄 때 사용한다. 

     

     

    그러면 다음과 같이 컨텐츠도 출력된다. 

     

    ■ 로그인한 사람만 글쓰기 권한 부여하기

     

     

    로그인한 사람 이름 보여주기

    만약 있다면 뜨고, 없다면 안뜨게 설정해주기.

     

     

    만약 로그인 값이 ne(not equal) null

    즉, 비어있지 않는다면 버튼이 뜬다. 

     

     

     

    따라서 로그인 했을 꼉우 버튼이 뜨는 것을 확인 가능하다. 

     

     

    조건을 걸어줬기 때문에 만약 /write 링크를 타고 들어오고자 해도

    다시 로그인 화면으로 돌아오게 된다.

     

    즉 로그인 권한이 없다면 글을 쓰지 못하는 것이다. 

     

     

    세션을 통해 저장한 "mname" 을 가져온다. 

    그러나 setM_name 은 String 타입 메서드고 getAttribute 는 object 타입이라서 형변환을 해준다. 

     

     

    board 에서 mno 를 가져올 것인데

    그 값을 members 테이블에 m_name 을 가져올 것이니까 이중 sql 구문을 넣어준다. 

     

     

    글이 정상적으로 나오는 것을 확인할 수 있다. 

    하지만 이러면 동명이인을 걸러낼 수 없다.

     

     

    따라서  m_name 으로 설정했던 값을 유니크 값인 mid 로 바꿔준다. 

     

     

    해당 변수 사용을 위해 DTO 에 m_id 를 넣어준다. 

    getter setter 도 다시 불러준다. 

     

     

    이제 맵퍼도 바꿔줘서 m_id 가 가져오게끔 만들어준다. 

    이제 그러면 한 사람만 추출해서 멤버가 겹치지 않는다.

     

    ■ 수정/삭제 게시판 글 당사자만 접근하게 설정

     

     

    mid 값이 비어있지 않고 + 사용자에게 입력받은 request.getParameter("id") 값인 mid 와 

    dto 에 저장되어 있는 m_id (데이터베이스 저장된) 가 같다면

    즉, 입력받은 id와 멤버등록된 id값이 동일한지 비교하는 것이다. 

     

    그러나 다음과 같이 수정 및 삭제 버튼이 사라진다.

    왜냐면 아직 dto 에 m_id 가 없기 때문이다. 

     

     

    이를 위해 m.m_id, 입력해준다. 

    이제 참고할 데이터가 생기게 된 것이다. 

     

     

    이제 본인이 로그인 했을때만 수정 삭제 버튼이 뜬다.

     

    mid 도 담아준다.

     

     

     

    값을 안던져줘서 오류가 뜬다. 

    따라서 이를 위해서 BoardDTO 타입 변수를 하나 더 만들어주고 전반적으로 변경해준다. 

    detail 이 int 타입이기 때문에 BoardDTO 타입으로 바꿔준다. 

     

     

    해당 인원이 쓴 글 수정창으로 로그인 한 후 들어가면 수정하기 창은 보인다. 

     

     

    mybatis 에서 사용할 때는 #{ }, jsp 에서 표현할때는 ${ }

Designed by Tistory.