본문 바로가기
공부/[Project] J2P

[J2P] 저장한 물품 리스트를 확인하는 기능

by 맴썰 2022. 5. 14.
Create table Jim(
	ID varchar(20) NOT NULL,
	name varchar(20) NOT NULL UNIQUE,
	item varchar(10000),
	FOREIGN KEY (ID) REFERENCES USER(ID),
	PRIMARY KEY (ID,name)
);

이전 포스트에서 물품 리스트(이하 Jim)의 저장을 수행할 때 Jim이 저장되는 형태이다.

package com.Jim2Pack.main.Mappers;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import com.Jim2Pack.main.VO.Jim;

@Repository
@Mapper
public interface JimMapper {
	public void AddJim(Jim jim);
	public int DeleteJim(String ID,String name);
	public Jim GetUserJimSet(String ID, String name);
	public List<Jim> getJimList(String ID);
}

Mapper에서 getJimList 메소드를 사용하여 특정 ID의 사용자가 등록한 모든 Jim List를 받아올 것이다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.Jim2Pack.main.Mappers.JimMapper">
    <insert id = "AddJim" parameterType = "Jim">
    	INSERT INTO Jim(ID, name, item) 
    	VALUES(#{ID},#{name}, #{item})
    </insert>
    <select id = "GetUserJimSet" parameterType = "String" resultType = "Jim">
    	SELECT * FROM Jim WHERE ID = #{ID} AND name = #{name}
    </select>
    <select id="getJimList"  parameterType = "String" resultType = "Jim">
    	SELECT * FROM Jim WHERE ID = #{ID}
    </select>
</mapper>

Mapper.xml에서 ID 기준으로 튜플들을 검색하는 SQL을 작성하였다.

package com.Jim2Pack.main.Service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.Jim2Pack.main.Mappers.JimMapper;
import com.Jim2Pack.main.VO.Jim;

@Service
public class getJimListService {
	@Autowired
	JimMapper jm;
	
	public List<Jim> getJimList(String ID){
		return jm.getJimList(ID);
	}
}

Mapper에서 정의한 메소드를 Service에서 호출하여 결과값을 반환하도록 구현하였다.

package com.Jim2Pack.main;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttribute;

import com.Jim2Pack.main.Service.getJimListService;
import com.Jim2Pack.main.VO.Jim;

@Controller
public class getJimListController {
	@Autowired
	getJimListService jls;
	
	@RequestMapping(value = "/JimList", method = RequestMethod.GET)
	public String view(HttpServletRequest request,@SessionAttribute("loggedID") String ID) {
		if(ID!=null) {
			List<Jim> list = jls.getJimList(ID);
			request.setAttribute("list", list);
		}
		
		return "/JimList";
	}
}

컨트롤러에서는 세션에 저장된 ID값을 이용해 service의 메소드를 실행시켜 얻은 Jim List를 request에 저장한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ include file="header.jsp"%>
<%@ page  import = "java.util.List"%>
<%@ page  import = "java.util.ArrayList"%>
<%@ page  import = "com.Jim2Pack.main.VO.Jim"%>
<%@ page  import = "com.Jim2Pack.main.config.SplitString"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>View Jim List</title>
</head>
<body>
<%
 String UserID = (String)session.getAttribute("loggedID");
if(UserID.equals("null")){
	out.println("<script>");
	out.println("alert('로그인 후 이용 가능합니다.')");
	out.println("location.href = '/'");
	out.println("</script>");
}
 List<Jim> list = (List<Jim>)request.getAttribute("list");
%>

<div class="container d-flex justify-content-left">
    <ul class="list-group mt-5 text-white">
        <%  
          for(int i=0; i<list.size(); i++){
        	  String str = list.get(i).getItem();
        	  String[] items = SplitString.getItems(str);
        	  System.out.println(items.length);
 		%>
        <li class="list-group-item d-flex justify-content-between align-content-center" >
            <div class="d-flex flex-row"> <i class="bi bi-archive-fill"></i>
            <details class = "jim_name">
        			<summary>
                     <%out.println(list.get(i).getName());%>
               		</summary>
    				<p>
					<%
					for(int j=0; j<items.length; j++){
					%>
					<br>
					&nbsp;&nbsp;&nbsp;<label> <input class="form-check-input" type="checkbox" value="" id="flexCheckChecked">  <%=items[j]%></label>
					<br>
					<%} %>
					</p>
        		</details>
                
            </div>
            
        </li>
        
        <%} %>
    </ul>
</div>
</body>
<%@ include file="footer.jsp"%>
</html>

JSP에서 먼저 request에 저장된 Jim List를 받아오고 리스트 내의 각 Jim 객체의 Item String에 대해 Split을 수행하여 화면에 출력한다. 조금 더 좋은 방법을 찾았어야 했는데 왜 이렇게 구현했었지..

 

package com.Jim2Pack.main.config;

public class SplitString {
	public static String[] getItems(String item) {
		item = item.substring(1,item.length()-1);
		String[] temp = item.split(",");
		for(int i=0; i<temp.length; i++) {
			if(temp[i].charAt(0)==' ') {
				temp[i] = temp[i].substring(1,temp[i].length());
			}
			System.out.println(temp[i]);
		}
		return temp;
	}
}

Item String Split에 사용한 클래스이다.

 

위와 같이 특정 ID에 저장된 모든 Jim List가 출력되며 화살표를 누르게 되면 해당 Jim의 아이템 리스트가 Check List의 형태로 출력되어 해당 item을 챙겼는지 체크해볼 수 있다.