공부/[Project] J2P

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

맴썰 2022. 5. 14. 16:49
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을 챙겼는지 체크해볼 수 있다.