[MVC] 쇼핑몰관리페이지 만들기 - Service, DAO, Controller 합치기

🐷Jinie (juniorDeveloper)·2020년 11월 3일
0

JSP/MVC/SPRING

목록 보기
28/81

1. Service 합치기

  • MemberService.java (Interface)

  • MemberServiceImpl.java (Class)

  • 다른파일에서 파일이 삭제되어 생기는 오류 해결하기

2. DAO 합치기

  • MemberDao.java (Interface)

  • MemberDaoImpl.java (Class)

package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import conn.DBConn;
import dto.MemberVo;
public class MemberDaoImpl implements MemberDao{
	DBConn db = DBConn.getInstance();
	Connection con = null;
	String sql =null;
	PreparedStatement pstmt = null;
	MemberVo m = null;
	ResultSet rs = null;
	List<MemberVo> list = null;
	
	@Override
	public void insert(MemberVo m) {
		try{   con = db.getConnect();
		       sql = " insert  into  member_tbl_02 ";
		       sql = sql + " (custno, custname, phone, address, joindate,  grade,  city ) " ;
		       sql = sql + " values(?,?,?,?,?,?,?) "; 

		       pstmt = con.prepareStatement(sql);  
		       pstmt.setInt(1, m.getCustno());
		       pstmt.setString(2,m.getCustname());
		       pstmt.setString(3,m.getPhone());
		       pstmt.setString(4,m.getAddress());
		       pstmt.setString(5, m.getJoindateS());
		       pstmt.setString(6, m.getGrade());
		       pstmt.setString(7, m.getCity());
		       pstmt.executeUpdate();
		       
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				if (pstmt != null){pstmt.close();}
				if (con != null){con.close();}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
	
		
	}

	@Override
	public void delete(MemberVo m) {
		try {
			con = db.getConnect();
			sql = "delete from member_tbl_02 where custno=?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, m.getCustno());
			pstmt.executeUpdate();
		} catch( Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if (pstmt != null){pstmt.close();}
				if (con != null){con.close();}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		
	}

	@Override
	public void editOk(MemberVo m) {
	    try {
	    	con = db.getConnect();
			sql = " update  member_tbl_02 set  ";
		       sql = sql + "  custname=?, phone=?, address=?, joindate=?,  grade=?,  city=?  " ;
		       sql = sql + " where custno=? "; 
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, m.getCustname());
			pstmt.setString(2, m.getPhone());
			pstmt.setString(3, m.getAddress());
			pstmt.setString(4, m.getJoindateS());
			pstmt.setString(5, m.getGrade());
			pstmt.setString(6, m.getCity());
			pstmt.setInt(7, m.getCustno());
			
			pstmt.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if (rs != null ) {rs.close();}
				if (pstmt != null){pstmt.close();}
				if (con != null){con.close();}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	
		
	}

	@Override
	public MemberVo edit(int k) {
		try {
			con = db.getConnect();
			sql = "select * from member_tbl_02 where custno=?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, k);
			rs = pstmt.executeQuery();
			rs.next();
			
			m = new MemberVo();
			m.setCustno(rs.getInt("custno"));
			m.setCustname(rs.getString("custname"));
			m.setPhone(rs.getString("phone"));
			m.setAddress(rs.getString("address"));
			m.setJoindateS(rs.getString("joindate"));
			m.setGrade(rs.getString("grade"));
			m.setCity(rs.getString("city"));	
	} catch (Exception e) {
		e.printStackTrace();
	}finally{
			try {
				if (rs != null ) {rs.close();}
				if (pstmt != null){pstmt.close();}
				if (con != null){con.close();}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	return m;
	}

	@Override
	public List<MemberVo> selectAll(MemberVo m) {
		list = new ArrayList<MemberVo>();
		String ch1 = m.getCh1();
		String ch2 = m.getCh2();
		try {
			con = db.getConnect();
			
			if(m.getCh1() == null || m.getCh2() == "") {
				sql = "select * from member_tbl_02";
			}else {
				if(ch1.equals("custname")) {
				sql = "select * from member_tbl_02 where custname like '%"+ch2+"%' ";
				}else {
					sql = "select * from member_tbl_02 where address like '%"+ch2+"%' ";
				}
			}
			pstmt = con.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				m = new MemberVo();
				m.setCustno(rs.getInt("custno"));
				m.setCustname(rs.getString("custname"));
				m.setPhone(rs.getString("phone"));
				m.setAddress(rs.getString("address"));
				m.setJoindateS(rs.getString("joindate"));
				m.setGrade(rs.getString("grade"));
				m.setCity(rs.getString("city"));
				
				list.add(m);
				
				System.out.println();
			}
	
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if (rs != null ) {rs.close();}
				if (pstmt != null){pstmt.close();}
				if (con != null){con.close();}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return list;
	}

}
  • DaoImpl에서는 각 쿼리실행시 공통적인부분은 전역변수로 선언하고 사용한다.
  • 수정후에도 잘 작동하는지 한번 더 확인한다.

3. Controller 합치기

[insert메서드 Controller]

  • 웹페이지에서 flag를 주소와 함께 넘긴다.
  • 웹에서 넘긴 flag를 controller에서 받아서 if문으로 각각의 활용해야하는 Controller를 골라준다.
  • form의 action에서는 a 태그로 링크할 때처럼 링크를통해 flag의 값을 넘겨줄 수 없기 때문에, hidden type의 input을 통해 값을 submit으로 넘겨주어야한다.
  • 위와같이 코드를 작성하면
  • 이런식으로 주소창에 flag=i 값이 잘 넘어간 것을 볼 수 있다.

  • Controller에서 flag를 받아 저장하고 flag의 값이 i 일 경우 insert메서드를 호출하는 코드를 작성한다.
    이것이 잘 실행되었는지 확인하기 위해서 System.out.println을 이용하여 저장하기를 출력해본다.
  • 회원등록을 실제로 테스트해보면 위의 사진처럼 콘솔에 저장하기가 잘 뜨고 값이 잘 입력되는것을 확인할 수 있다.

[select 메서드 Controller]

  • 먼저 select 메서드를 이용한 목록을 만들기 위해서는
    기존에 int형으로 변환해서 값을 받았던 custno의 값을 처리해주어야한다.
  • custno의 값이 웹에서 넘어가지 않은 상태인 '목록보기' 바로가기 버튼으로는
  • 전역변수가 된 custno를 parseInt 할 수 없기 때문이다.
  • if문으로 웹에서 넘어오는 custno의 값이 null이거나 공백일 경우를 가정하여 처리해준다.
<a href="/MVC2/MemberController?flag=r">회원목록 조회/수정</a> &nbsp; &nbsp; &nbsp;
  • 이런식으로 top.jsp에 a태그를 이용해 링크를 걸때, flag를 select 메서드를 가진 Controller로 연결해준다.

  • flag가 r로 잘 넘어오면서 목록보기가 정상출력되는 것을 확인할 수 있다.
  • 좀 더 진행해서 검색창도 활성화 시켜보면,
  • form.jsp의 form action처리방식과 동일하게
    input type을 "hidden"으로해서 알맞은 flag를 넘겨준다.


[edit 메서드 Controller]

  • 회원정보 상세보기 페이지 메서드를 합친다.


[editOk 메서드 Controller]

  • form이나 select검색창과 동일하게 input type hidden을 이용해서 editOk 메서드로 찾아가는 flag=u를 보내준다.

  • '김행복22'값이 '김행복씨'로 정상 수정되는 것을 볼 수 있다.

[delete 메서드 Controller]

<td><a href=/MVC2/MemberController?flag=d&custno=${m.custno}>${m.city}</a></td>
  • list 목록보기에서 a 태그로 링크를 넘길때,
    flag=d 를 이용해서 flag값을 함께 넘겨준다.

  • 처리가 끝나면 또치를 지워보자
  • 주소창에 flag=d를 잘 넘기고 Controller에서 flag=d 메서드 delete를 잘 불러와
    '또치'정보를 잘 삭제한 것을 볼 수 있다.
profile
ᴘᴇᴛɪᴛs ᴅᴇ́ᴠᴇʟᴏᴘᴘᴇᴜʀ. ᴘʀᴏɢʀᴀᴍᴍᴀᴛɪᴏɴ = ᴘʟᴀɪsɪʀ 💕

0개의 댓글