parisangsoo
mybatis를 활용한 고객관리 프로그램 (03/24) 본문
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