CREATE TABLE LPROD
(
LPROD_ID NUMBER,
LPROD_GU CHAR(4),
LPROD_NM VARCHAR2(40),
CONSTRAINT PK_LPROD PRIMARY KEY(LPROD_GU)
);
Insert into LPROD (LPROD_ID,LPROD_GU,LPROD_NM) values (1,'P101','컴퓨터제품');
Insert into LPROD (LPROD_ID,LPROD_GU,LPROD_NM) values (2,'P102','전자제품');
Insert into LPROD (LPROD_ID,LPROD_GU,LPROD_NM) values (3,'P201','여성캐주얼');
Insert into LPROD (LPROD_ID,LPROD_GU,LPROD_NM) values (4,'P202','남성캐주얼');
Insert into LPROD (LPROD_ID,LPROD_GU,LPROD_NM) values (5,'P301','피혁잡화');
Insert into LPROD (LPROD_ID,LPROD_GU,LPROD_NM) values (6,'P302','화장품');
Insert into LPROD (LPROD_ID,LPROD_GU,LPROD_NM) values (7,'P401','음반/CD');
Insert into LPROD (LPROD_ID,LPROD_GU,LPROD_NM) values (8,'P402','도서');
Insert into LPROD (LPROD_ID,LPROD_GU,LPROD_NM) values (9,'P403','문구류');
COMMIT;
JSP
create.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form action="/lprod/createPost" method="post">
<p>
<select name="gubun">
<option value="" disabled selected>선택해주세요</option>
<option value="P1" >컴퓨터전자</option>
<option value="P2" >의류</option>
<option value="P3" >생활용품</option>
<option value="P4" >음반/도서</option>
<option value="P5" >음식</option>
</select>
</p>
<p>
상품분류명 : <input type="text" name="lprodNm" placeholder="상품분류명" required>
</p>
<p>
<input type="submit" value="등록">
</p>
</form>
</body>
</html>
detail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>상품 상세</title>
</head>
<script>
window.onload = function(){
let p1 = document.querySelector('#viewForm');
let p2 = document.querySelector('#editForm');
let edit = document.querySelector('#edit');
let del = document.querySelector('#del');
p2.hidden = true;
edit.addEventListener('click', function(e){
p1.hidden = true;
p2.hidden = false;
})
del.addEventListener('click', function(e){
if(confirm("정말 현재 상품을 삭제하시겠습니까?")){
location.href = "/lprod/delete?lprodId=${vo.lprodId}";
}
})
}
</script>
<body>
<!-- //// 일반모드 시작 //// -->
<div id="viewForm">
<h2>상품 상세</h2>
<p>상품번호 : ${vo.lprodId}</p>
<p>상품분류번호 : ${vo.lprodGu}</p>
<p>상품분류명 : ${vo.lprodNm}</p>
<p>
<input type="button" id="edit" value="수정">
<input type="button" id="del" value="삭제">
<input type="button" value="목록" onclick="javascript:location.href='/lprod/list'" />
</p>
</div>
<!-- //// 일반모드 끝 //// -->
<!-- //// 수정모드 시작 //// -->
<div id="editForm">
<h2>상품 수정</h2>
<form action="/lprod/update" method="post">
<input type="hidden" name="lprodId" value="${vo.lprodId}">
<p>상품분류코드 : <input type="text" name="lprodGu" required placeholder="상품분류코드" value="${vo.lprodGu}" /></p>
<p>상품분류명 : <input type="text" name="lprodNm" required placeholder="상품분류명" value="${vo.lprodNm}"/></p>
<p>
<input type="submit" value="확인">
<input type="button" value="취소" onclick="location.href='/lprod/detail?lprodId=${vo.lprodId}'">
</p>
</form>
</div>
<!-- //// 수정모드 끝 //// -->
</body>
</html>
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="/resources/js/jquery.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<h1>상품 목록</h1>
<a href="/lprod/create">상품 등록</a>
<form action="/lprod/list">
<input type="text" name="lprodGu" placeholder="상품분류번호">
<input type="submit" value="검색">
</form>
<table border="1">
<tr>
<th>상품번호</th>
<th>상품코드</th>
<th>상품분류명</th>
</tr>
<c:if test="${fn:length(list)==0}">
<tr>
<td colspan="3">등록된 상품이 없습니다</td>
</tr>
</c:if>
<c:forEach items="${list}" var="vo">
<tr>
<td>${vo.lprodId}</td>
<td><a href="/lprod/detail?lprodId=${vo.lprodId}">${vo.lprodGu}</a></td>
<td>${vo.lprodNm}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
JAVA
LprodVO.java
package kr.or.ddit.vo;
import lombok.Data;
// 자바 빈 클래스
@Data
public class LprodVO {
private int lprodId;
private String lprodGu;
private String lprodNm;
private String gubun;
}
LprodController.java
package kr.or.ddit.controller;
import java.util.List;
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.servlet.ModelAndView;
import kr.or.ddit.service.LprodService;
import kr.or.ddit.vo.LprodVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class LprodController {
@Autowired
LprodService service;
@RequestMapping(value="/lprod/create", method=RequestMethod.GET)
public ModelAndView create() {
ModelAndView mav = new ModelAndView();
mav.setViewName("lprod/create");
return mav;
}
@RequestMapping(value="/lprod/list", method=RequestMethod.GET)
public ModelAndView list(LprodVO vo) {
ModelAndView mav = new ModelAndView();
mav.setViewName("lprod/list");
List<LprodVO> list = this.service.list(vo);
mav.addObject("list", list);
return mav;
}
@RequestMapping(value="/lprod/detail", method=RequestMethod.GET)
public ModelAndView detail(LprodVO vo) {
ModelAndView mav = new ModelAndView();
mav.setViewName("lprod/detail");
vo = this.service.detail(vo);
mav.addObject("vo", vo);
return mav;
}
@RequestMapping(value="/lprod/delete", method=RequestMethod.GET)
public ModelAndView delete(LprodVO vo) {
ModelAndView mav = new ModelAndView();
// /로 시작하는 경우는 절대 경로
// 그냥 시작할경우 상대 경로
mav.setViewName("redirect:/lprod/list");
int result = this.service.delete(vo);
return mav;
}
@RequestMapping(value="/lprod/update", method=RequestMethod.POST)
public ModelAndView update(LprodVO vo) {
ModelAndView mav = new ModelAndView();
int result = this.service.update(vo);
mav.setViewName("redirect:/lprod/detail?lprodId="+vo.getLprodId());
return mav;
}
@RequestMapping(value="/lprod/createPost", method=RequestMethod.POST)
public ModelAndView createPost(LprodVO lvo) {
ModelAndView mav = new ModelAndView();
log.info("LprodVo"+lvo);
int result = this.service.createPost(lvo);
System.out.println("createPost -> result : "+result);
mav.setViewName("redirect:/lprod/list");
return mav;
}
}
LprodService.java
package kr.or.ddit.service;
import java.util.List;
import kr.or.ddit.vo.LprodVO;
public interface LprodService {
public int createPost(LprodVO lvo);
public List<LprodVO> list(LprodVO vo);
public LprodVO detail(LprodVO vo);
public int update(LprodVO vo);
public int delete(LprodVO vo);
}
LprodServiceImpl.java
package kr.or.ddit.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import kr.or.ddit.dao.LprodDao;
import kr.or.ddit.service.LprodService;
import kr.or.ddit.vo.LprodVO;
@Service
public class LprodServiceImpl implements LprodService {
@Autowired
LprodDao dao;
@Override
public int createPost(LprodVO lvo) {
return this.dao.createPost(lvo);
}
@Override
public List<LprodVO> list(LprodVO vo) {
return this.dao.list(vo);
}
@Override
public LprodVO detail(LprodVO vo) {
return this.dao.detail(vo);
}
@Override
public int update(LprodVO vo) {
return this.dao.update(vo);
}
@Override
public int delete(LprodVO vo) {
return this.dao.delete(vo);
}
}
LprodDao.java
package kr.or.ddit.dao;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import kr.or.ddit.vo.LprodVO;
@Repository
public class LprodDao {
@Autowired
SqlSessionTemplate sst;
public int createPost(LprodVO lvo) {
return this.sst.insert("lprod.createPost", lvo);
}
public List<LprodVO> list(LprodVO vo) {
return this.sst.selectList("lprod.list", vo);
}
public LprodVO detail(LprodVO vo) {
return this.sst.selectOne("lprod.detail", vo);
}
public int update(LprodVO vo) {
return this.sst.update("lprod.update", vo);
}
public int delete(LprodVO vo) {
return this.sst.delete("lprod.delete", vo);
}
}
MyBatis
typeAlias설정
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
[마이바티스] 스프링에서 "_"를 사용한 컬럼명을 사용 시(BOOK 테이블의 BOOK_ID)
카멜케이스로 읽어줌(bookId)
ex) 테이블 컬러명이 member_id인 경우 jsp화면단에서 이 값을 사용 시 memberId로 사용
-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 자주 사용하는 타입의 별칭을 세팅 -->
<typeAliases>
<typeAlias type="kr.or.ddit.vo.BookVO" alias="bookVo" />
<typeAlias type="kr.or.ddit.vo.LprodVO" alias="LprodVo" />
</typeAliases>
</configuration>
lprod_SQL.xml
<?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="lprod">
<insert id="createPost" parameterType="LprodVo">
<selectKey resultType="String" order="BEFORE" keyProperty="lprodGu">
select #{gubun}|| lpad((to_number(nvl(max(substr(lprod_gu,3)),0))+1),2,0)
from lprod
where substr(lprod_gu,1,2)=#{gubun}
</selectKey>
insert into lprod
values((select nvl(max(lprod_id),0)+1 from lprod), #{lprodGu}, #{lprodNm})
</insert>
<sql id="idchk">
<if test="lprodGu != null">
where lprod_gu like '%'||#{lprodGu}||'%'
</if>
</sql>
<select id="list" parameterType="lprodVo" resultType="lprodVo">
select *
from lprod
<include refid="idchk"/>
order by lprod_gu
</select>
<select id="detail" parameterType="lprodVo" resultType="lprodVo">
select *
from lprod
where lprod_id=#{lprodId}
</select>
<update id="update" parameterType="lprodVo">
update lprod
set lprod_gu = #{lprodGu},
lprod_nm = #{lprodNm}
where lprod_id = #{lprodId}
</update>
<delete id="delete" parameterType="lprodVo">
delete lprod
where lprod_id = #{lprodId}
</delete>
</mapper>
'Spring' 카테고리의 다른 글
[Spring] 도서 정보 crud 2 - 목록 검색, 카테고리 (+EL태그) (0) | 2024.07.25 |
---|---|
[Spring] 게시판 CRUD (0) | 2024.07.22 |
[Spring] 애노테이션 Annotation (0) | 2024.07.22 |
[Spring] 도서 관리 CRUD (2) | 2024.07.19 |
[Spring] Spring MVC (0) | 2024.07.19 |