공부/[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>
<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을 챙겼는지 체크해볼 수 있다.