째의 개발 기록방

Java/Spring 게시판(CRUD) 연습 본문

Back End/Java, Spring

Java/Spring 게시판(CRUD) 연습

째린이 2021. 5. 27. 20:22

 

***이 글은 이제 막 개발을 시작한 자린이가 기억하기 위한일종의 기록으로 정확하지않을 수 있음을 알립니다.***

 

 

구현할 서비스 정보

- 주문리스트 게시판을 구현한다.

 

1. 가장 먼저 파일들을 만든다.

  • vo
  • DB
  • mapper.xml
  • controller
  • service/serviceimpl
  • jsp
  • dao

 

2. 그 다음 작성 순서는 이러하다.

  1. DB
  2. vo객체 생성 ( @Alias, @Data[getter,setter] )
  3. jsp 파일 작성
  4. Controller (호출 url 정의를 위해 우선 작성 필요)
  5. 마이바티스 쿼리 정의파일 (SQL xml 쿼리)
  6. Mapper / DAO (서비스 객체에서 사용하려면 우선 작성 필요)
  7. Service (컨트롤러 객체에서 사용하려면 우선 작성 필요)
  8. Serviceimpl 작성

DB

여기서 M_NUM이 키가 된다.그리고 자동증가 값으로 설정해두었다.

 

vo 작성

import org.apache.ibatis.type.Alias;

@Alias("OrderInformationVO")
public class OrderInformationVO {
	int orderNum;
	String orderTradeName;
	String orderer;
	String orderDate;
	String orderAmount;
	String selectTxt;
	String selectType;
	
	public int getOrderNum() {
		return orderNum;
	}
	public String getOrderTradeName() {
		return orderTradeName;
	}
	public void setOrderTradeName(String orderTradeName) {
		this.orderTradeName = orderTradeName;
	}
	public void setOrderNum(int orderNum) {
		this.orderNum = orderNum;
	}
	public String getOrderer() {
		return orderer;
	}
	public void setOrderer(String orderer) {
		this.orderer = orderer;
	}
	public String getOrderDate() {
		return orderDate;
	}
	public void setOrderDate(String orderDate) {
		this.orderDate = orderDate;
	}
	public String getOrderAmount() {
		return orderAmount;
	}
	public void setOrderAmount(String orderAmount) {
		this.orderAmount = orderAmount;
	}
	public String getSelectTxt() {
		return selectTxt;
	}
	public void setSelectTxt(String selectTxt) {
		this.selectTxt = selectTxt;
	}
	public String getSelectType() {
		return selectType;
	}
	public void setSelectType(String selectType) {
		this.selectType = selectType;
	}
	
}

여기서 GEETER, SETTER는 @Data라는 애노테이션으로 대체 할 수 있다.

 

jsp 작성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="/js/front/jquery-3.4.1.min.js"></script>
<script>
	<%--js goSearch 함수 --%>
	function goSearch(){
		$("#searchForm").attr("action","/order/orderList.do");
		$("#searchForm").attr("method","POST");
		$("#searchForm").submit();
	}
	<%--js delete 함수 --%>
	function orderDelete(orderNum){
		
		if (confirm(orderNum+"번을 삭세하시겠습니까?")){
			
			location.href = "/order/orderModifyDelete.do?orderNum="+orderNum;
			
		}
	}
</script>
</head>
<body>
	<div id="wrap">
		<h1>주문리스트 조회</h1>
		<form id="searchForm" action="/order/orderList.do" method="POST">
			<select name="selectType">
				<option value="">--전체보기--</option>
				<option value="tradeName" <c:if test="${OrderInformationVO.selectType eq 'tradeName' }">selected</c:if>>상품명</option>
				<option value="orderer" <c:if test="${OrderInformationVO.selectType eq 'orderer'}">selected</c:if>>주문자</option>
			</select>
			<input type="text" name="selectTxt" value="${OrderInformationVO.selectTxt}">
			<a href="javascript:goSearch();">검색</a>
		</form>
		<div><a id="listSubmit" href="/order/orderWriteForm.do">등록</a></div>
		<table>
		 <thead>
		 <tr>
			<th>주문번호</th>
			<th>상품명</th>
			<th>주문자</th>
			<th>주문일시</th>
			<th>주문금액</th>
			<th> </th>
		 </tr>
		 </thead>
		 <tbody id="orderInformation">
		    <c:forEach var="oi" items="${oiList}" varStatus="status">
		 	<tr>
				<td><c:out value="${oi.orderNum }"></c:out></td>
				<td><a href="/order/orderDetailForm.do?orderNum=${oi.orderNum}"><c:out value="${oi.orderTradeName }"></c:out></a></td>
				<td><c:out value="${oi.orderer }"></c:out></td>
				<td><c:out value="${oi.orderDate }"></c:out></td>
				<td><c:out value="${oi.orderAmount }"></c:out></td>
				<td><a href="javascript:orderDelete(${oi.orderNum });">삭제</a></td>
			</tr>
		    </c:forEach>
		 </tbody>
		</table>
	</div>
</body>
</html>

게시판의 메인화면이자 모든 데이터리스트를 볼 수 있는 화면 jsp파일이다.

 

         <tbody id="orderInformation">
		    <c:forEach var="oi" items="${oiList}" varStatus="status">
		 	<tr>
				<td><c:out value="${oi.orderNum }"></c:out></td>
				<td><a href="/order/orderDetailForm.do?orderNum=${oi.orderNum}"><c:out value="${oi.orderTradeName }"></c:out></a></td>
				<td><c:out value="${oi.orderer }"></c:out></td>
				<td><c:out value="${oi.orderDate }"></c:out></td>
				<td><c:out value="${oi.orderAmount }"></c:out></td>
				<td><a href="javascript:orderDelete(${oi.orderNum });">삭제</a></td>
			</tr>
		    </c:forEach>
		 </tbody>

여기서 이 부분이 jstl의 get방식으로 데이터 값을 가져오는 방법이다.

 

 

Mapper.xml 작성

<mapper namespace="kr.co..****..dao.OrderMapper">
	<!-- 목록을 위한 xml -->
	<select id="selectOrderList" parameterType="kr.co..****..vo.OrderInformationVO" resultType="kr.co..****..vo.OrderInformationVO" >
		SELECT
			 ORDER_NUM        AS  orderNum 
			,ORDER_TRADENAME  AS  orderTradeName
			,ORDERER          AS  orderer
			,ORDER_DATE       AS  orderDate
			,ORDER_AMOUNT     AS  orderAmount
		FROM ORDER_INFO
		WHERE 1=1	
		<!-- 검색조건 -->
		<if test='selectTxt != null and selectTxt != "" ' >
			<if test='selectType != null and selectType != "" ' >
				<choose>
					<when test='selectType == "tradeName" '>
						AND ORDER_TRADENAME = #{selectTxt}
					</when>
					<when test='selectType == "orderer" '>
						AND ORDERER = #{selectTxt}
					</when>
					<otherwise>
						
					</otherwise>
				</choose>
			</if>
		</if>
	</select>
</mapper>	                     

리스트 조회와 검색

여기의 id값이 dao 에서의 메서드명이 된다.

mapper 작성

@Mapper("orderMapper")
public interface OrderMapper {
	//리스트 목록조회
	List<OrderInformationVO> selectOrderList(OrderInformationVO mapperVO);
	
}

 

메서드명 = xml에서 id값

 

service작성

public interface OrderService {
	/**
	 * 주문 리스트 조회
	 * @param mapperVO
	 * @return
	 * @throws Exception
	 */
	public List<OrderInformationVO> selectOrderList(OrderInformationVO mapperVO) throws Exception;
	
}

serviceimpl 작성

@Service("orderService")//난 서비스다.

public class OrderServiceImpl implements OrderService{
	
	@Resource(name="orderMapper")//mapper를 참조할것이다.
	OrderMapper orderMapper;
	
	/**
	 * 주문리스트 조회
	 */
	@Override
	public List<OrderInformationVO> selectOrderList (OrderInformationVO serviceVO) throws Exception{
		List<OrderInformationVO> returnServiceList = orderMapper.selectOrderList(serviceVO);
		return returnServiceList;
	}
}

 

contoller 작성

@Controller//난 컨트롤러다.
@RequestMapping(value="/order")
public class OrderController {
	
	@Resource(name="orderService")
	private OrderService orderService;
	/**
	 * 주문리스트 조회
	 * @param contOrderVO
	 * @param request
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/orderList.do")
	public ModelAndView orderList (@ModelAttribute OrderInformationVO contOrderVO, HttpServletRequest request) throws Exception{
		
		ModelAndView mv = new ModelAndView();
		//list조회를 위해 list를 담아서 보여줄 박스생성
		List<OrderInformationVO> orderVoList = null;
		
		orderVoList = orderService.selectOrderList(contOrderVO);
		
		mv.setViewName("/front/order/orderInformationList");
		mv.addObject("oiList", orderVoList);
		mv.addObject("OrderInformationVO", contOrderVO);
		return mv;
	}
}

컨트롤러의 일부분

@RequestMapping애노테이션은 url을 설정과함께 밑에 함수와 한 세트로 매핑한다는것이다.

 

throws Exception = 오류 발생시 예외로 빼서 처리하겠다는 뜻이다.

노란색 밑줄 친 부분은 service에서 정의한 함수와의 연결고리이다.

초록색 밑줄 친 부분은 setviewname으로 jsp파일을 정의하는것이다.