parisangsoo
Mybatis (03/24 JSP) 본문
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