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) 본문

JSP

Mybatis (03/24 JSP)

SangssI 2023. 3. 24. 14:28

Mybatis : DB와 JAVA연결을 간단하게 도와주는 소프트웨어

예제) Mybatis를 이용하여 사원 테이블의 데이터베이스의 데이터를 홈페이지에 출력

mybatis에 필요한 xml 파일

config.mybatis 패키지 생성 -> sqlMapConfig.xml 붙여넣기

config.mybatis.mapper 패키지 생성 -> sawon.xml 붙여넣기 

패키지 이름에서 . 은 실제 드라이브에선 / 역할로 위의 패키지 이름에서 실제 드라이브에 저장되는 장소는 

config/mybatis/mapper의 경로에 저장이 된다.

 

1. JSP 파일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!-- 날짜 데이터에서 00:00:00을 제거하기 위해 function을 등록 -->
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<style>
	
	</style>
</head>
<body>
	<table border="1" align="center">
		<caption>:::사원 정보:::</caption>
		
		<tr>
			<th>사번</th>
			<th>부서번호</th>
			<th>급여</th>
			<th>사원명</th>
			<th>직책</th>
			<th>입사날짜</th>
		</tr>
		
		<c:forEach var="vo" items="${ list }">
		<tr>
			<td>${ vo.sabun }</td>
			<td>${ vo.deptno }</td>
			<td>${ vo.sapay }</td>
			<td>${ vo.saname }</td>
			<td>${ vo.sajob }</td>
			<td>${fn:split(vo.sahire,' ')[0] }</td>		
		</tr>
		</c:forEach>
	</table>
</body>
</html>

2.서블릿 파일

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.SawonDAO;
import vo.SawonVO;


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

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		
		//사원 목록 조회
		
		List<SawonVO> list = SawonDAO.getInstance().select();
		
		//받아온  list를 request영역에 바인딩
		request.setAttribute("list", list);
		
		RequestDispatcher disp = request.getRequestDispatcher("sawon_list.jsp");
		disp.forward(request, response); //포워딩
		
	}

}

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

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

<?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">

<!-- DB접속 및 앞으로 사용할 mapper를 정의하는 설정파일 -->
<configuration>
	<environments default="">
		<environment id="">
			<transactionManager type="JDBC" />
			<dataSource type="JNDI">
				<property name="data_source" 
				value="java:comp/env/jdbc/oracle_test" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<!-- mapper가 존재하지 않으면 미리 선언도 불가능한 코드 무조건 존재해야함 -->
		<mapper resource="config/mybatis/mapper/sawon.xml" />
	</mappers>
</configuration>

 

②config.mybatis.mapper 패키지의 sawon.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="s">
	<select id="sawon_list" resultType="vo.SawonVO">
		select * from sawon <!-- 세미콜론 절대 불가능  -->
	</select>
</mapper>

③dao 패키지의 SawonDAO.java 파일

package dao;

import java.util.List;

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

import service.MyBatisConnector;
import vo.SawonVO;

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

	public static SawonDAO getInstance() {
	//생성되지 않았으면 생성
	if (single == null)
		single = new SawonDAO();
	//생성된 객체정보를 반환
	return single;
	}
	
	
	
	SqlSessionFactory factory = null;
	
	public SawonDAO() {
		//DAO클래스가 생성자를 통해 메모리 할당을 받을 때
		//factory() ( 어떤DB로 접속할 것인지, mapper로 누구를 쓸것인가...)
		factory = MyBatisConnector.getInstance().getSessionFactory();
		
	}
	
	//사원목록 조회
	public List<SawonVO> select(){
		//맵퍼를 호출하고 쿼리문을 요청하거나, 파라미터를 보내는 등의 작업을 하는 클래스
		SqlSession sqlSession = factory.openSession();
		
		//selectList 메서드를 통해 mapper가 호출되면
		//실행된 query문의 최종결과를 List 구조로 받는다.
		List<SawonVO> vo = sqlSession.selectList("s.sawon_list");
		return vo;
	}
}

④ service패키지의 MyBatisConnector.java

package service;

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

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
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패키지의 SawonVO.java

package vo;

public class SawonVO {
	private int sabun, sapay; //사번, 부서번호, 급여
	private int deptno; 
	private String saname, sajob, sahire; // 사원이름, 직책
	
	
	public int getSabun() {
		return sabun;
	}
	public void setSabun(int sabun) {
		this.sabun = sabun;
	}
	public int getSapay() {
		return sapay;
	}
	public void setSapay(int sapay) {
		this.sapay = sapay;
	}
	public int getDeptno() {
		return deptno;
	}
	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}
	public String getSaname() {
		return saname;
	}
	public void setSaname(String saname) {
		this.saname = saname;
	}
	public String getSajob() {
		return sajob;
	}
	public void setSajob(String sajob) {
		this.sajob = sajob;
	}
	public String getSahire() {
		return sahire;
	}
	public void setSahire(String sahire) {
		this.sahire = sahire;
	}
	
	
}

'JSP' 카테고리의 다른 글

게시판 만들기(03/27 JSP)  (0) 2023.03.27
mybatis를 활용한 고객관리 프로그램 (03/24)  (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