STUDY/Spring boot

Spring Boot로 만드는 도서관리시스템웹 프로젝트_03

uragiljay 2022. 6. 22. 00:41
반응형

2022.06.21
세션값을 확인하여 로그인 로그아웃 구분하는 헤더적용
도서정보를 보여주는 book_list와
대출정보를 보여주는 br_list를 추가하였다.

 

1. 로그인/ 아웃 구분
로그인시 controller 에서 생성한 세션값을

session.setAttribute("id", memberDto.getMid());
session.setAttribute("name", memberDto.getMname());

헤더부분에서 확인하여
세션값이 null이면 '로그인' 과 '회원가입'
세션값이 있다면 '로그아웃'과 '정보수정' 메뉴가 보이도록 해주었다.

        <%
            String sessionValid = (String) session.getAttribute("id");
            if(sessionValid == null){
        %>
        <a href="/login">로그인</a>
        <%
        }else{
        %>
        <a href="logout">로그아웃</a></td>
        <%
        }
        %>

 

로그인 전 메뉴구성

 

로그인 후 메뉴구성


이 방법으로 세션값을 관리자 계정과 비교하여
홈화면 구성을 다르게 만들어 주려고 한다. 구현은 아직ㅋㅋㅋ


2. 도서정보를 보여주는 book_list / 대출정보를 보여주는 br_list
처음 프로젝트를 구상할 때 막혔던 부분이다.
만들다보면 어떻게 해결 될 거라고 생각했는데 해결못함ㅜㅜ

문제가 되는 부분은 book_list(도서정보)의 대출상태와 반납예정일
대출상태와 반납예정일은 br_list(대출정보)에 insert 할 때
'대출중' / 대출일+7 로 자동으로 입력되도록 만들었는데
이걸 불러 올 방법을 못찾고 있다.
안배웠는지 배웠는데 까먹었는지 도저히 방법을 못찾겠다.

다른 필드값들 처럼 dao에 만들어 놓은 ArrayList에서 <c:forEach 를 사용하여
필드값을 불러 오려고 했는데 반납예정일이 비어있다.(저자는 데이터를 안넣어둠)

<문제해결>

SQL문 공부가 부족해서 해맸던 부분이다.  복잡하게 가져오려고 이것 저것 하다가

점점이상해지고 해결이 안되다가 간단하게(?) SQL 문법을 파밍하여 해결 했다. 

UPDATE SET SELECT 

테이블2 에서 특정 필드값을 테이블1의 필드로 업데이트 하는 문법이다.

아래는 두 테이블의 bcode 값이 같은 경우 b_borrow 테이블에서 bstate와 rdate값을

b_book테이블의 bstate와 rdate 필드에 가져와 업데이트 해주는 쿼리

 

	<update id="bstateDao">
		UPDATE b_book T1 SET T1.bstate = (SELECT T2.bstate FROM b_borrow T2 WHERE T2.brbcode = T1.bcode),T1.rdate = (SELECT T2.rdate FROM b_borrow T2 WHERE T2.brbcode = T1.bcode) WHERE T1.bcode IN (SELECT T2.brbcode FROM b_borrow T2 WHERE T2.brbcode = T1.bcode)
	</update>

컨트롤러에 brrow테이블에 insert 작업 시 실행되도록 bstateDao도 추가. 

### Controller ###

@RequestMapping(value ="/br_inputOk")
	public String br_inputOk(HttpServletRequest request, Model model) {
		String brbcode = request.getParameter("brbcode");
		String brmid = request.getParameter("brmid");
								
		IDao dao = sqlSession.getMapper(IDao.class);
		
			dao.br_inputDao(brbcode, brmid);
			dao.bstateDao();
			    
		return  "redirect:br_list";
	}
!!!실패한 소스!!!
<c:forEach items="${b_list }" var="bdto">
<tr>
    <td >${bdto.bcode}</td>
    <td >${bdto.bname}</td>
    <td >${bdto.bcategori}</td>
    <td >${bdto.bwriter }</td>
	<c:forEach items="${br_list }" var="bdto">	
		<td >${brdto.bstate}</td>
		<td >${brdto.rdate}</td>
</c:forEach>
## 수정 후 코드 ##
<c:forEach items="${b_list }" var="bdto">
<tr>
    <td >${bdto.bcode}</td>
    <td >${bdto.bname}</td>
    <td >${bdto.bcategori}</td>
    <td >${bdto.bwriter }</td>
    <td >${bdto.bstate }</td>
    <td><c:out value="${fn:substring(bdto.rdate,2,11)}"/></td>
</c:forEach>

book_list(도서정보 화면)
대출상태 반납예정일 정상출력 된 Book_list

 

 

 

br_list의 날짜 필드는 jstl라이브러리를 불러와 <c:out value="{fn:substring()} 을 사용하여

년도 앞에 두자리와 시/분/초를 지우고 년도 뒷자리와 날짜까지만 보여지도록 해주었다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
----------------------------------------------------------------------
<td >
<c:out value="${fn:substring(brdto.sdate,2,11)}"/>
</td>

<td>
<c:out value="${fn:substring(brdto.rdate,2,11)}"/>
</td>

br_list(대출정보 화면)
컬럼명 수정 뒤 데이터가 전부 들어온 br_list

FK로 만들어둔 도서코드와 회원ID가 안보인다. 요건 또 무슨 일인지
외래키 적용해 둔 것이 문제인지 모르겠다. 해결이 안되면 외래키 적용풀고
대출정보 입력시에 도서코드와 회원ID가 있는지 체크 하는 방향으로 수정해야할듯.

<문제해결>

외래키가 문제가 아니었다. 외래키 제약을 풀어주었으나

도서코드와 회원ID필드는 변화없이 비어있었다. 이리저리 만져보다가

컬럼명(fk_bcode, fk_mid)의 언더바가 문제인가 싶어 언더바를 삭제한

 (brbcode, brmid) 로 변경해주니 데이터가 들어온다. 컬럼명에 언더바가 들어가면 작동불량!!

 

반납버튼
대출코드를 확인하여 반납상태 '대출가능' 반납예정일은 sysdate로 업데이트하는
동작 할 예정이다. 물론 아직 구현하지 않았다.

도서정보 / 대출정보 입력
슉슉 만들었는데 서버실행 시 에러나서 주석처리 되어있다.

 




반응형