STUDY/Spring boot

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

uragiljay 2022. 6. 27. 01:18
반응형

도서리스트 화면

리스트에 검색기능 추가

목록의 오른쪽 위에 옵션버튼과 키워드를 입력받아 리스트를 출력하는 검색기능을 추가하였다. 

 

먼저 IDao 에 키워드 입력받아 작동하는 TitleSearchlistDao 를 만들어주고

## IDao ##
public ArrayList<BookDto> TitleSearchlistDao(String keyword);

mapper에 SQL문을 추가해 주었다.

## mapper query 부분 ##
<select id="TitleSearchlistDao" resultType="com.uragil.LMS.dto.BookDto">
    SELECT * FROM b_book WHERE bname LIKE '%'|| #{param1} ||'%' ORDER BY bcode DESC  
</select>

컨트롤러에서는 키워드와 옵션값을 받아 저장하고

두 값이 null  이면 전체 내용을 출력하고 값이 들어오면 TitlesearchDao 가 작동하도록 해주었다.

## controller ##
@RequestMapping(value ="/book_list")
	public String book_list(HttpServletRequest request,  Model model) {
		
		String searchKeyword = request.getParameter("searchKeyword");
		String searchOption = request.getParameter("searchOption");
		System.out.println(searchKeyword);		
		IDao dao = sqlSession.getMapper(IDao.class);

		ArrayList<BookDto> bDtos = null;
		ArrayList<BorrowDto> brDtos = null;
		if(searchOption == null || searchKeyword == null) {
			bDtos = dao.b_listDao();
			brDtos = dao.br_listDao();
		} else {
			if(searchOption.equals("title")) {
		    	bDtos = dao.TitleSearchlistDao(searchKeyword);

리스트에 select 를 이용한 옵션과 키워드 입력창을 만들어주었다.

## book_list ##
<select name="searchOption">
    <option value="title">타이틀</option>
    <option value="categori">장르</option>
    <option value="writer">저자</option>
</select>
<input type="text" name="searchKeyword">
<input type="submit" value="검색">

도서정보 입력

도서명과 장르, 작가를 입력받아 Insert 해준다.

도서정보 입력페이지
입력받아 만들어진 도서리스트

 

IDao에 책타이틀, 장르, 저자를 입력받아 작동하는 b_inputDao 를 만들어주었고

public void b_inputDao(String bname, String bcategori, String bwriter);

도서코드(bcode)는 오라클 DB에 만들어둔 시퀀스를 이용하여 1부터 자동생성되도록 해주었다.

##  mapper ##
<insert id="b_inputDao">
    INSERT INTO b_book (bcode, bname, bcategori, bwriter)VALUES(b_book_seq.nextval, #{param1},#{param2},#{param3})
</insert>

시퀀스는 Oracle Sql Developer에서 간단하게 이름만 정해주면 만들어진다. 

시퀀스 사용하기 전에 만들어둔 데이터가 있어 MIN_VALUE는 10으로 정해주었다. 

Developer에서 만들어준 시퀀스 정보

컨트롤러 request로 전달받은 타이틀,  장르, 저자를  저장하여 사용

## Controller ##

@RequestMapping(value ="/book_inputOk")
public String b_inputOk(HttpServletRequest request, Model model) {
    String bname = request.getParameter("bname");
    String bcategori = request.getParameter("bcategori");
    String bwriter = request.getParameter("bwriter");
    IDao dao = sqlSession.getMapper(IDao.class);
	    dao.b_inputDao(bname, bcategori, bwriter);
    return "redirect:book_list";
}

 

대출정보 입력

도서코드와 대출하는 회원ID 입력받아 Insert 해준다.

대출정보 입력화면
입력받아 만들어진 대출리스트

대출코드는 시퀀스를 이용하여 자동 생성하게 하였고 

도서코드(외래키), 회원아이디(외래키) 를 입력받아 Insert 해준다

## mapper ##
<insert id="br_inputDao">
INSERT INTO b_borrow(brcode, brbcode, brmid) VALUES(b_borrow_seq.nextval, #{param1}, #{param2})
</insert>

 

대출날짜와 반납날짜는 sysdate 를 이용하여 자동 생성되도록 하였다. 

bstate는 default 값으로 '대출중' 을 주었고 

 

대출 정보 Insert 시에 반납예정일(rdate)과 대출상태(bstate)를 

b_book 테이블에 업데이트 하도록 하여 도서정보 목록에서 출력되도록 하였다.

	<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>

 

도서정보 입력과 비슷한 구조라 다른 부분은 생략

 

 

CSS 디자인 업데이트

resources - static  에 css폴더를 만들어 그안에 css를 만들어두고

 

jsp의 <head>에서 아래를 호출하여 적용

<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/board.css>

생각해둔 디자인이 아니라 이것저것 수정하고 확인하고 하느라 손가락 노가다함


에러났던 부분

 

1. git에 push 가 안되어 이것저것 건드려 보다가

push 하려던 파일들이 수정 전 후가 섞여 저장되어 버리는 이상한 짓을 해버려서 

서버 실행자체가 안되는 상태가 되어버렸다.

수정하다보니 패턴이 보여 금방 수정 가능 했지만 개깜놀

모르는건 조심해서 건들자 

 

2. DB를 처음에 대충 만들어서 수정하면서 작업하다 보니

테이블에 추가된 컬럼을 Dto에 넣어주지 않아서 에러 발생

에러 안내가 떠서 쉽게 찾을 수 있었다. 

 

3. 버튼 눌러도 작동 안함

자주 한 실수라 금방 찾을 수 있었다.

화면 구성을 복붙해서 사용하다가 

form action =" "  부분을 수정안해서 작동이 안되었다. 

 

4. DB의 컬럼명과 mapper의 매칭이 잘못 되었다.

DB의 도서타이틀 컬럼명은 'bname' 인데 Dao 와 매퍼에서 'btitle'로 

적어놨었다. 생각없이 만든 컬렴명이 문제. 기초가 중요하다는걸 또 느낌

 

반응형