Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

parisangsoo

mybatis를 활용한 고객관리 프로그램 (03/24) 본문

JSP

mybatis를 활용한 고객관리 프로그램 (03/24)

SangssI 2023. 3. 24. 14:49

Mybatis를 이용하여 고객 관리 프로그램 구현

 

1.JSP파일

gogek_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"%>    
    
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
		
		<script>
			function del(f){
				
				f.action = "gogek_del.do";
				f.submit();
				
			}
			
			function search(){
				
				let addr_search = document.getElementById("addr_search").value;
				
				location.href="gogek_search.do?addr=" + addr_search;
				
			}
		</script>
		
	</head>
	
	<body>
		<table border="1">
		
			<tr>
				<td colspan="6" align="center">
					<input type="button" value="등록" 
						onclick="location.href='insert_form.jsp'">
						
					<input placeholder="검색할 지역을 입력하세요" id="addr_search">
					<input type="button" value="검색" onclick="search();"> 	
				</td>
			</tr>
		
			<tr>
				<th>번호</th>
				<th>고객명</th>
				<th>주소</th>
				<th>주민번호</th>
				<th>담당자</th>
				<th>비고</th>
			</tr>
		
			<c:forEach var="vo" items="${ list }">
				<form>
					<tr>
						<td>${ vo.gobun }</td>
						<td>${ vo.goname }</td>
						<td>${ vo.goaddr }</td>
						<td>${ vo.gojumin }</td>
						<td>${ vo.godam }</td>
						
						<input type="hidden" name="idx" value="${ vo.gobun }">
						<td><input type="button" value="삭제" onclick="del(this.form);"></td>
					</tr>
				</form>
			</c:forEach>
			
		
		</table>
	</body>
</html>

insert_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
		
		<script>
			function send( f ){
				
				//name, addr, jumin, godam
				
				f.action = "insert_form.do";
				f.method = "post";
				f.submit();
			}		
		</script>
		
	</head>
	
	<body>
		<form>
			<table border="1">
				<tr>
					<th>이름</th>
					<td><input name="name"></td>
				</tr>
				
				<tr>
					<th>주소</th>
					<td><input name="addr"></td>
				</tr>
				
				<tr>
					<th>주민번호</th>
					<td><input name="jumin"></td>
				</tr>
				
				<tr>
					<th>담당자</th>
					<td><input name="godam"></td>
				</tr>
				
				<tr>
					<td colspan="2">
						<input type="button" value="등록" onclick="send(this.form)">
						<input type="button" value="취소" onclick="history.go(-1)">
					</td>
				</tr>
				
			</table>
		</form>
	</body>
</html>

 

2.서블릿 파일

①GogekListAction.java

package action;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.GogekDAO;
import vo.GogekVO;

/**
 * Servlet implementation class GogekListAction
 */
@WebServlet("/list.do")
public class GogekListAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		List<GogekVO> list = GogekDAO.getInstance().select();
		
		request.setAttribute("list", list);
		
		RequestDispatcher disp = request.getRequestDispatcher("gogek_list.jsp");
		disp.forward(request, response);
		
	}

}

②GogekDelAction.java

package action;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.GogekDAO;

/**
 * Servlet implementation class GogekDelAction
 */
@WebServlet("/gogek_del.do")
public class GogekDelAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int idx = Integer.parseInt(request.getParameter("idx"));
		
		
		int res = GogekDAO.getInstance().delete(idx);
		
		response.sendRedirect("list.do");
	}

}

③GogekInsertAction.java

package action;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.GogekDAO;
import vo.GogekVO;

/**
 * Servlet implementation class GogekInsertAction
 */
@WebServlet("/insert_form.do")
public class GogekInsertAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		//post로 전달받은 정보의 한글이 깨지는 것을 방지
		request.setCharacterEncoding("utf-8");
		
		//insert_form.do?name=홍길동&addr=서울시 관악구&jumin=801111...&godam=10;
		String name = request.getParameter("name");
		String addr = request.getParameter("addr");
		String jumin = request.getParameter("jumin");
		int godam = Integer.parseInt( request.getParameter("godam") );
		
		//정보들을 vo로 묶어서 DAO에 전달
		GogekVO vo = new GogekVO();
		vo.setGoname(name);
		vo.setGoaddr(addr);
		vo.setGojumin(jumin);
		vo.setGodam(godam);
		
		GogekDAO.getInstance().insert(vo);
		
		response.sendRedirect("gogeklist.do");
	}

}

④SearchAction.java

package action;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.GogekDAO;
import vo.GogekVO;

/**
 * Servlet implementation class SearchAction
 */
@WebServlet("/gogek_search.do")
public class SearchAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		//gogek_search.do?addr=서울시 마포구
		String search = "all";
		String addr = request.getParameter("addr");
		
		//.do? --> null
		//.do?addr= --> '' , empty
		//정상적으로 파라미터가 전달된 경우
		if( addr != null && !addr.isEmpty() ) {
			search = addr;
		}
		
		//목록 가져오기
		List<GogekVO> list = null;
		
		if( search.equals("all") ) {
			list = GogekDAO.getInstance().selectGogek();
		}else {
			list = GogekDAO.getInstance().selectGogek( search );
		}
		
		//list객체 바인딩 및 포워딩
		request.setAttribute("list", list);
		RequestDispatcher disp = 
				request.getRequestDispatcher("gogek_list.jsp");
		disp.forward(request, response);
		
		
	}

}

필요한 패키지 및 자바클래스,XML 파일

① config.mybatis 패키지의 sqlMapConfig.xml 파일

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration SYSTEM "http://mybatis.org/dtd/mybatis-3-config.dtd" PUBLIC "-//mybatis.org//DTD Config 3.0//EN">

<!-- DB접속 및 앞으로 사용할 mapper를 정의하는 설정파일 -->

-<configuration>


-<environments default="">


-<environment id="">

<transactionManager type="JDBC"/>


-<dataSource type="JNDI">

<property value="java:comp/env/jdbc/oracle_test" name="data_source"/>

</dataSource>

</environment>

</environments>


-<mappers>

<mapper resource="config/mybatis/mapper/gogek.xml"/>

<!-- <mapper resource="config/mybatis/mapper/gogek.xml" /> -->


</mappers>

</configuration>

②config.mybatis.mapper 패키지의 gogek.xml 파일

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN">

-<mapper namespace="g">

<select resultType="vo.GogekVO" id="gogek_list">select * from gogek </select>

<delete id="gogek_del" parameterType="int">delete from gogek where gobun = #{ idx } </delete>

<insert id="gogek_ins" parameterType="vo.GogekVO">insert into gogek values( seq_gogek_idx.nextVal,#{goname},#{goaddr},#{gojumin},#{godam} ) </insert>

<!-- 지역별 고객 조회 -->


<select resultType="vo.GogekVO" id="gogek_select" parameterType="String">select * from gogek where goaddr like '%'||#{addr}||'%' </select>

</mapper>

③dao 패키지의 GogekDAO.java 파일

package dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import service.MyBatisConnector;
import vo.GogekVO;

public class GogekDAO {
	// single-ton pattern: 
	// 객체1개만생성해서 지속적으로 서비스하자
	static GogekDAO single = null;

	public static GogekDAO getInstance() {
		//생성되지 않았으면 생성
		if (single == null)
			single = new GogekDAO();
		//생성된 객체정보를 반환
		return single;
	}
	
	SqlSessionFactory factory;
	public GogekDAO() {
		factory = MyBatisConnector.getInstance().getSessionFactory();
	}
	
	//전체 고객목록 가져오기
	public List<GogekVO> selectGogek(){
		//SqlSession을 통해 mapper로 접근
		SqlSession sqlSession = factory.openSession();
		List<GogekVO> list = sqlSession.selectList("g.gogek_list");
		sqlSession.close();
		
		return list;
	}
	
	//선택적 고객목록 가져오기
	public List<GogekVO> selectGogek( String addr ){
		//SqlSession을 통해 mapper로 접근
		SqlSession sqlSession = factory.openSession();
		List<GogekVO> list = sqlSession.selectList("g.gogek_select", addr);
		sqlSession.close();
		
		return list;
	}
	
	//고객삭제
	public int delete(int idx) {
		SqlSession sqlSession = factory.openSession(true);//auto commit
		
		//sqlSession은 모든 메서드가 파라미터를 반드시 한개만 가질 수 있다
		int res = sqlSession.delete("g.gogek_del", idx);
		//sqlSession.commit();
		sqlSession.close();
		
		return res;
	}
	
	//고객추가
	public int insert( GogekVO vo ) {
		SqlSession sqlSession = factory.openSession(true);//auto commit
		
		//맵퍼로 전달할 파라미터는 최대 1개까지.
		int res = sqlSession.insert("g.gogek_ins", vo );
		sqlSession.close();
		
		return res;
	}
}

④ service패키지의 MyBatisConnector.java

package service;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisConnector {

	// single-ton pattern: 
	// 객체1개만생성해서 지속적으로 서비스하자
	static MyBatisConnector single = null;

	public static MyBatisConnector getInstance() {
		//생성되지 않았으면 생성
		if (single == null)
			single = new MyBatisConnector();
		//생성된 객체정보를 반환
		return single;
	}
	
	//앞으로 어떤 DB에 연결할것인가, mapper로 누구를 사용할 것인가? 등의 정보를 저장할 클래스
	SqlSessionFactory factory = null;

	public MyBatisConnector() {
		
		try {
			///sqlMapConfig.xml파일을 읽어서 reader스트림에게 전달
			Reader reader = Resources.getResourceAsReader(
					"config/mybatis/sqlMapConfig.xml");
			
			//단순히 내용만 읽어온 reader로는 기능적인 구현이 불가하므로
			//factory에게 내용을 전달하여 DB와 관련된 처리를 할 수 있도록 요청
			factory = new SqlSessionFactoryBuilder().build(reader);
			reader.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public SqlSessionFactory getSessionFactory() {
		return factory;
	}
	
}

⑤ vo패키지의 GogekVO.java

package vo;

public class GogekVO {
	private int gobun, godam;
	private String goname, goaddr, gojumin;
	
	public int getGobun() {
		return gobun;
	}
	public void setGobun(int gobun) {
		this.gobun = gobun;
	}
	public int getGodam() {
		return godam;
	}
	public void setGodam(int godam) {
		this.godam = godam;
	}
	public String getGoname() {
		return goname;
	}
	public void setGoname(String goname) {
		this.goname = goname;
	}
	public String getGoaddr() {
		return goaddr;
	}
	public void setGoaddr(String goaddr) {
		this.goaddr = goaddr;
	}
	public String getGojumin() {
		return gojumin;
	}
	public void setGojumin(String gojumin) {
		this.gojumin = gojumin;
	}
	
	
}

'JSP' 카테고리의 다른 글

게시판 만들기(03/27 JSP)  (0) 2023.03.27
Mybatis (03/24 JSP)  (0) 2023.03.24
로그인,로그아웃 홈페이지 (03/23 JSP)  (0) 2023.03.23
갤러리 프로그램( 03/22 JSP )  (0) 2023.03.22
FileInput 03/22 JSP  (0) 2023.03.22
Comments