Spring

JH.·2022년 1월 16일

Spring

목록 보기
1/1
post-thumbnail

JDBC 와 Spring의 작업 차이

JDBC는 쿼리문, DAO, DTO, CONTROLLER, JAVA파일을 모두 다 일일히 만들어야한다.
그래서 프로젝트때 너무나 같은작업을 계속반복해서 하다보니 몇 번 빡이 돌기도 했다.
하지만 Spring은 JDBC에 비해 론나 간단하다.
Controller -> mapper.java -> mapper.xml이 세 개만 만들어주면 된다.
하지만 그 전에 설정을 잘 해주는게 중요하다.

====================================================================

글 작성 이후 게시판 글을 누르면 상세 내용 보이게


일단 제목을 클릭 할 수 있게 해주는데 쿼리스트링으로 원하는 글의 번호를 db로 넘긴다.

<td><a href="/myapp/boardContent.do?idx=<%=vo.getIdx()%>"><%=vo.getTitle() %></a></td>
======================================================================================
Controller
	@GetMapping("/boardContent.do")
	public String boardContent(int idx, Model model) { // 2
		Board vo = mapper.boardContent(idx);
		model.addAttribute("vo", vo); // 객체바인딩
		return "boardContent"; // /WEB-INF/views/boardContent.jsp
	}

메서드 안에 파라미터로 받아올 idx(글번호)와 받아온 내용 담아줄 Model객체를
매개변수로 지정해주고

BoardMapper(인터페이스)에 xml에서 실행할 메서드를 만들어준다.

mapper.xml에서 실행할 쿼리를 만들어주는데 값을 넘겨줘야하니 파라미터타입과
받아온 값을 담아줄 resultType를 둘 다 지정해준다.
Select쿼리는 resultType과 parameterType을 둘 다 적는게 가능하고받아오는 값이 하나일때는 파라미터 타입을 생략가능하다.

글 제목을 클릭했을때 이렇게 나옴.

그리고 boardContent.jsp에서 확인 할 몇가지 내용이 있다.

<div class="container">
  <h2>Spring WEB MVC01</h2>
  <div class="panel panel-default">
    <div class="panel-heading">BOARD</div>
    <div class="panel-body">
		<table class="table table-bordered">
			<tr>
				<td>번호  </td>
				<td><%=vo.getIdx() %></td>
			</tr>
			<tr>
				<td>제목  </td>
				<td><%=vo.getTitle()%></td>
			</tr>
			<tr>
				<td>내용  </td>
				<td><%=vo.getContent().replaceAll("\n", "<br>") %></td>
			</tr>
			<tr>
				<td>작성자  </td>
				<td><%=vo.getWriter() %></td>
			</tr>
			<tr>
				<td>작성일  </td>
				<td><%=vo.getIndate().split(" ")[0] %></td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<button class= "btn btn-info btn-sm" onclick="updateFn(<%=vo.getIdx() %>)">수정</button>
					<button class= "btn btn-warning btn-sm" onclick="delFn(<%=vo.getIdx() %>)">삭제</button>
					<button class= "btn btn-success btn-sm" onclick="location.href='/myapp/boardList.do'">리스트</button>
				</td>
		  	</tr>
		</table>
	</div>

내용에 replaceAll함수를 쓴 이유는 내용에 엔터를 쳐서 줄 넘김을 했을 때 db에서 불러오는 값은 \n으로 오기때문에 br태그로 바꿔줘서 줄이 바꾸게 해줌.

작성일은 일자만 나오게 하기위해 split함수를 사용해 빈칸을 기준으로 0번째 인덱스만 가져온다


그리고 수정, 삭제 , 리스트 3가지의 버튼 중에서 수정과 삭제는 script함수를 사용해줬다.

글 수정

  <script type="text/javascript">
  	function delFn(idx) {
		location.href="/myapp/boardDelete.do/"+idx;
	}
  	
  	function updateFn(idx) {
		location.href="/myapp/boardUpdate.do/"+idx;
	}
  	
  </script>

함수에 컨트롤러로 갈 수 있게 주소를 준 후 매개변수로 글번호를 받아온다.
그리고 수정 버튼을 누르면

이렇게 그 글의 내용을 수정할 수 있는 update.jsp에서 불러준다.

		<form class="form-horizontal" action="/myapp/boardUpdate.do" method="post">
		  <input type="hidden" name="idx" value="<%=vo.getIdx()%>">
		  <div class="form-group">
		    <label class="control-label col-sm-2" for="title">제목:</label>
		    <div class="col-sm-10">
		      <input type="text" class="form-control" name="title" id="title" value="<%=vo.getTitle()%>">
		    </div>
		  </div>
		  <div class="form-group">
		    <label class="control-label col-sm-2" for="content">내용:</label>
		    <div class="col-sm-10">
		    	<textarea rows="10" class="form-control" name="content"><%=vo.getContent()%> </textarea>
		    </div>
		  </div>
		  <div class="form-group">
		    <label class="control-label col-sm-2" for="writer">작성자:</label>
		    <div class="col-sm-10">
		      <input type="text" class="form-control" name="writer" id="writer" value="<%=vo.getWriter()%>" readonly="readonly">
		    </div>
		  </div>
		  <div class="form-group">
		    <div class="col-sm-offset-2 col-sm-10" align="center">
		      <button type="submit" class="btn btn-success btn-sm">수정</button>
		      <button type="reset" class="btn btn-warning btn-sm">취소</button>
		      <button type="button" class="btn btn-info btn-sm" onclick="location.href='/myapp/boardList.do'">리스트</button>
		    </div>
		  </div>
		</form>

보여줄 값은 value로 보여주고 작성자는 바뀔수 없으니 readonly로 고정을 시켜줌.
근데 여기서 중요한 점은 Content.jsp 와 update.jsp는 둘 다 boardUpdate.do이다.


위 처럼 컨트롤러에서 두개를 각각 다르게 인식하게 하기 위해서 @RequestMapping으로 get post둘 다 가능하게 한뒤에 뒤에 각각 method = get 혹은 post로 지정을 해준다.

참고로 .do뒤에 / {파라미터} 를 해주고 매개변수에 @PathVariable을 해주는게 더 좋은 쿼리스트링 방법이다.

그리고 똑같이 인터페이스에 메서드 -> mapper.xml에 쿼리문 작성을 해주면된다.

내용을 바꿔준 후 수정버튼을 누르면

이렇게 내용이 바뀐걸 볼 수 있다.

0개의 댓글