[쇼핑몰 회원관리 페이지] Spring-Mybatis

🐷Jinie (juniorDeveloper)·2020년 12월 10일
1

Practice Portfolio

목록 보기
1/1
  • SpringFramework
  • JSP / JAVA
  • EL/JSTL
  • Mybatis
  • ORACLE SQL
  • HTML/CSS/JavaScript

1. 데이터베이스 구성

2. 메인화면

  • 메인화면구성
    : 회원등록 (Create)
    회원목록조회/수정 (Read/Update/Delete)
    회원매출(SQL Join을 이용한 Read)
    홈으로

3. 회원등록

  • Create
  • SQL INSERT사용
  • 회원번호는 자동으로 찍혀들어오도록 만들었고,
    수정이 불가하도록 readonly 속성을 주었다.

  • 다음과 같은 값을 입력하고
  • 목록보기 페이지로 바로 연결해서 '김인간'이라는 입력하고자했던 데이터가 정상입력 된 것을 확인한다.

[코드보기]

<insert id="memberInsert">
		INSERT INTO MEMBER_TBL_02 
			(CUSTNO, CUSTNAME, PHONE, ADDRESS, JOINDATE, GRADE, CITY) 
		VALUES 
			((SELECT MAX(CUSTNO) FROM MEMBER_TBL_02)+1, #{custname},#{phone},#{address},#{joindate},#{grade},#{city}) 
</insert>
@RequestMapping(value="/insertMember.do")
	public String insertMember(MemberVO vo) {
		s.memberInsert(vo);
		return "memberList.do";
	}
@Repository
public class MemberDAOImpl implements MemberDAO{
	@Autowired
	SqlSessionTemplate mybatis;
	@Override
	public void memberInsert(MemberVO vo) {
		mybatis.insert("member-mapper.memberInsert", vo);
	}

4. 목록조회 / 수정

4-1. 목록조회 + 검색하기

  • Read
  • SQL SELECT문 사용
  • 목록보기페이지에는 검색창을 함께 구현했다.
    주소에 '서울시'를 검색해보자
  • 주소에 '서울시'를 포함한 결과만 노출된다.

[코드보기]

<form action="memberList.do">
	<select name="ch1">
		<option value="custname">이름</option>
		<option value="address">주소</option>
	</select>
	<input type="text" name="ch2" >
	<input type="submit" value="검색하기">
</form>
<select id="memberSelectAll" resultType="MemberVO">
		SELECT * 
		FROM MEMBER_TBL_02 
		<where>
			<if test="ch1=='custname'">
				 AND CUSTNAME LIKE '%'||#{ch2}||'%' 
			</if>
			<if test="ch1=='address'">
				 AND ADDRESS LIKE '%'||#{ch2}||'%' 
			</if>
		</where>
		ORDER BY CUSTNO DESC
	</select>
@Override
	public List<MemberVO> memberSelectAll(MemberVO vo) {
		return mybatis.selectList("member-mapper.memberSelectAll", vo);
	}
@RequestMapping(value="/memberList.do")
	public String selectMemberAll(MemberVO vo ,Model m) {
		m.addAttribute("list", s.memberSelectAll(vo));
		return "member_list.jsp";
	}

4-2. 수정하기

  • Update
  • SQL UPDATE문 사용
  • '김인간' 을 수정하기 위해서는 김인간의 회원번호를 클릭한다.
  • 수정페이지로 연결되면 '김인간수정'으로 수정한다.
  • 결과확인은 다시 목록보기페이지가 확인되도록 설정했다.
    '김인간수정'으로 목록이 정상 업데이트되었다.

[코드보기]

@Override
	public MemberVO memberSelectOne(int idx) {
		return mybatis.selectOne("member-mapper.memberSelectOne", idx);
	}
    
@Override
	public void updateMember(MemberVO vo) {
		mybatis.update("member-mapper.memberUpdate", vo);
	}
<select id="memberSelectOne" resultType="MemberVO">
		SELECT * 
		FROM MEMBER_TBL_02
		WHERE CUSTNO=#{custno}
	</select>
    
<update id="memberUpdate">
		UPDATE MEMBER_TBL_02 
		SET 
			CUSTNAME=#{custname},
			PHONE=#{phone},
			ADDRESS=#{address},
			GRADE=#{grade},
			CITY=#{city}
		WHERE CUSTNO=#{custno}
	</update>
@RequestMapping(value="/memberedit.do")
	public String selectMemberOne(MemberVO vo ,Model m) {
		m.addAttribute("m", s.memberSelectOne(vo.getCustno()));
		return "edit.jsp";
	}
    
@RequestMapping(value="/editOk.do")
	public String editMember(MemberVO vo) {
		s.updateMember(vo);
		return "memberList.do";
	}

4-3. 삭제하기

  • Delete
  • SQL DELETE문 사용
  • '김인간수정'의 레코드를 지워보자
  • 거주지역링크부분을 클릭하면 삭제가 진행되도록 설정했다.
  • '김인간수정'의 데이터가 삭제완료되었다.
  • 삭제완료이후에는 다시 목록보기 페이지에서 확인이 가능하도록 설정했다.

[코드보기]

@Override
	public void deleteMember(int idx) {
		mybatis.delete("member-mapper.memberDelete", idx);
	}
<delete id="memberDelete">
		DELETE FROM MEMBER_TBL_02 
		WHERE CUSTNO=#{custno}
</delete>
@RequestMapping(value="/memberdelete.do")
	public String deleteMember(MemberVO vo) {
		s.deleteMember(vo.getCustno());;
		return "memberList.do";
	}

5. 회원매출

  • Read
  • SQL JOIN, SELET, GROUP BY, SUM 이용
  • 매출보기페이지는 회원번호 (custno) 를 이용하여 Member 테이블과 Money 테이블을 조인하고
    매출금액의 SUM 을 이용해 출력했다.
    [코드보기]
<select id="moneyList" resultType="MoneyVO">
	SELECT M1.CUSTNO AS CUSTNO, M1.CUSTNAME AS CUSTNAME, M1.GRADE AS GRADE,  SUM(M2.PRICE) AS PRICE 
	FROM MEMBER_TBL_02 M1 
		JOIN MONEY_TBL_02 M2 
		ON M1.CUSTNO = M2.CUSTNO 
	GROUP BY M1.CUSTNO, M1.CUSTNAME, M1.GRADE 
	ORDER  BY SUM(M2.PRICE) DESC 
	</select>
package com.batis.biz.project;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.batis.biz.common.MoneyVO;
@Repository
public class MoneyDAOImpl implements MoneyDAO {
	@Autowired
	SqlSessionTemplate mybatis;
	@Override
	public List<MoneyVO> moneylist(MoneyVO vo) {
		return mybatis.selectList("money-mapper.moneyList", vo);
	}
}
package com.batis.biz.project;

import java.util.List;

import com.batis.biz.common.MoneyVO;

public interface MoneyService {
	List<MoneyVO> moneylist(MoneyVO vo);
}
@RequestMapping(value="/money_list.do")
	public String selectMoney(MoneyVO vo ,Model m) {
		m.addAttribute("list", ms.moneylist(vo));
		return "money_list.jsp";
	}
profile
ᴘᴇᴛɪᴛs ᴅᴇ́ᴠᴇʟᴏᴘᴘᴇᴜʀ. ᴘʀᴏɢʀᴀᴍᴍᴀᴛɪᴏɴ = ᴘʟᴀɪsɪʀ 💕

0개의 댓글