JAVA

17.MVC/mybatis

네스이 2022. 8. 5. 16:48

2022.08.05.금


1.MVC

 

 -게시판 검색

package com.controller;

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 com.dto.BoardDTO;
import com.service.BoardService;
import com.service.BoardServiceImpl;

@WebServlet("/list")
public class BoardListController extends HttpServlet 
{
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException 
	{
		//검색 파라미터 얻기
		String searchName = request.getParameter("serachName");
		String searchValue = request.getParameter("searchValue");
		
		//비즈니스 로직 처리
		BoardService service = new BoardServiceImpl();
		List<BoardDTO> list = service.list(searchName, searchValue);
		
		//데이터 전달 => scope 이용
		request.setAttribute("board_list", list);
		
		//jsp에게 요청(위임)
		RequestDispatcher dispatch = request.getRequestDispatcher("list.jsp");
		dispatch.forward(request, response);
		
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException 
	{
		doGet(request, response);
	}

}
//list.jsp

<%@page import="com.dto.BoardDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판 목록보기</title>
</head>
<body>
<table border="1">
	<!-- html 주석 -->
	<!-- 검색 기능 추가 -->
	<tr>
	 <td colspan="5">
	  <form action="list">
	   <select name="searchName">
	    <option value="title">제목</option>
	    <option value="author">작성자</option>
	   </select>
	   <input type="text" name="searchValue">
	   <input type="submit" value="검색">
	  </form>
	 </td>
	</tr>
	<tr>
		<th>글번호</th>
		<th>제목</th>
		<th>작성자</th>
		<th>작성일</th>
		<th>조회수</th>
	</tr>
<%
	List<BoardDTO> list = (List<BoardDTO>)request.getAttribute("board_list");
	for(BoardDTO dto : list)
	{
		int num = dto.getNum();
		String author = dto.getAuthor();
		String writeday = dto.getWriteday();
		int readcnt = dto.getReadcnt();
%>	
	<tr>
		<td><%= num %></td>
		<td><a href="retrieve?num=<%= num %>"><%= dto.getTitle() %></a></td>
		<td><%= author %></td>
		<td><%= writeday %></td>
		<td><%= readcnt %></td>
	</tr>
<%
	} 
%>

</table>
<a href="writeUI">글쓰기</a>
</body>
</html>

 -Paging 처리

1)Servlet

package com.controller;

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 com.dto.BoardDTO;
import com.dto.PageDTO;
import com.service.BoardService;
import com.service.BoardServiceImpl;

@WebServlet("/list")
public class BoardListController extends HttpServlet 
{
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException 
	{
		//현재 페이지 번호
		String curPage = request.getParameter("curPage");
		if(curPage == null) curPage = "1";
		
		
		//검색 파라미터 얻기
		String searchName = request.getParameter("searchName");
		String searchValue = request.getParameter("searchValue");
		
		//비즈니스 로직 처리
		BoardService service = new BoardServiceImpl();
		PageDTO pageDTO = 
				service.list(searchName, searchValue, Integer.parseInt(curPage));
		
		//데이터 전달 => scope 이용
		request.setAttribute("pageDTO", pageDTO);
		request.setAttribute("searchName", searchName);
		request.setAttribute("searchValue", searchValue);
		
		//jsp에게 요청(위임)
		RequestDispatcher dispatch = request.getRequestDispatcher("list.jsp");
		dispatch.forward(request, response);
		
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException 
	{
		doGet(request, response);
	}

}

2)JSP

//list.jsp

<%@page import="com.dto.PageDTO"%>
<%@page import="com.dto.BoardDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판 목록보기</title>
</head>
<body>
<table border="1">
	<!-- html 주석 -->
	<!-- 검색 기능 추가 -->
	<tr>
	 <td colspan="5">
	  <form action="list">
	   <select name="searchName">
	    <option value="title">제목</option>
	    <option value="author">작성자</option>
	   </select>
	   <input type="text" name="searchValue">
	   <input type="submit" value="검색">
	  </form>
	 </td>
	</tr>
	<tr>
		<th>글번호</th>
		<th>제목</th>
		<th>작성자</th>
		<th>작성일</th>
		<th>조회수</th>
	</tr>
<%
	PageDTO pageDTO = (PageDTO)request.getAttribute("pageDTO");

	for(BoardDTO dto : pageDTO.getList())
	{
		int num = dto.getNum();
		String title = dto.getTitle();
		String author = dto.getAuthor();
		String writeday = dto.getWriteday();
		int readcnt = dto.getReadcnt();
%>	
	<tr>
		<td><%= num %></td>
		<td><a href="retrieve?num=<%= num %>"><%= title %></a></td>
		<td><%= author %></td>
		<td><%= writeday %></td>
		<td><%= readcnt %></td>
	</tr>
<%
	} 
%>

</table>
<%
	String searchName = (String)request.getAttribute("searchName");
	String searchValue = (String)request.getAttribute("searchValue");
	//페이지 링크 번호 출력
	int curPage = pageDTO.getCurPage();
	int perPage = pageDTO.getPerPage();
	int totalRecord = pageDTO.getTotalRecord();
	
	int totalPage = totalRecord / perPage;
	if(totalRecord % perPage != 0) totalPage++;
	
	for(int i = 1; i <= totalPage; i++)
	{
		if(i == curPage)
		{
%>
			<%= i %>&nbsp;&nbsp;
<%		
		}
		else
		{
%> 
			<a href="list?curPage=<%= i %>&searchName=<%= searchName %>&searchValue=<%= searchValue %>"><%= i %></a>&nbsp;&nbsp;
<%
		}
	}
%>
<br>
<a href="writeUI">글쓰기</a>
</body>
</html>

3)DAO

package com.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 com.dto.BoardDTO;
import com.dto.PageDTO;

public class BoardDAO 
{
	//글삭제
	public int delete(Connection con, int n)
	{
		int num = 0;
		PreparedStatement pstmt = null;
		try 
		{
			String sql = "delete board where num = ?";
			
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, n);
			num = pstmt.executeUpdate();
		} 
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(pstmt != null) pstmt.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		
		
		return num;
	}
	//글수정
	public int update(Connection con, BoardDTO dto)
	{
		int num = 0;
		PreparedStatement pstmt = null;
		try 
		{
			String sql = "update board set title = ?, author = ?, content = ? "
						+ "where num = ?";
			
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, dto.getTitle());
			pstmt.setString(2, dto.getAuthor());
			pstmt.setString(3, dto.getContent());
			pstmt.setInt(4, dto.getNum());
			
			num = pstmt.executeUpdate();
		} 
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(pstmt != null) pstmt.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		
		
		return num;
	}
	//조회수 증가(retrieve메서드에서만 사용)
	private void readCntUpdate(Connection con, int num)
	{
		PreparedStatement pstmt = null;
		try 
		{
			String sql = "update board set readcnt = readcnt + 1 where num = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, num);
			pstmt.executeUpdate();
		} 
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(pstmt != null) pstmt.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
	}
	//글쓰기
	public int write(Connection con, BoardDTO dto)
	{
		int num = 0;
		PreparedStatement pstmt = null;
		try 
		{
			String sql = "INSERT INTO board (num, title, author, content) "
						+ "values(board_seq.nextval, ?, ?, ?)";
			
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, dto.getTitle());
			pstmt.setString(2, dto.getAuthor());
			pstmt.setString(3, dto.getContent());
			
			num = pstmt.executeUpdate();
		} 
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(pstmt != null) pstmt.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		
		
		return num;
	}
	
	//글자세히 보기
		public BoardDTO retrieve(Connection con, int num) 
		{
			//readCntUpdate() 호출
			readCntUpdate(con, num);
			
			BoardDTO dto = new BoardDTO();
			PreparedStatement pstmt = null;
			ResultSet rs = null;
			
			try 
			{
				String sql = "SELECT num, title, author, content, to_char(writeday, 'yyyy/mm/dd') as writeday, readcnt"
							  + " FROM board where num = ?";
				pstmt = con.prepareStatement(sql);
				pstmt.setInt(1, num);
				rs = pstmt.executeQuery();
				
				if(rs.next())
				{   
					String title = rs.getString("title");   
					String author = rs.getString("author");
					String content = rs.getString("content");
					String writeday = rs.getString("writeday");
					int    readcnt = rs.getInt("readcnt");
					 
					dto.setNum(num);
					dto.setTitle(title);
					dto.setAuthor(author);
					dto.setContent(content);
					dto.setWriteday(writeday);
					dto.setReadcnt(readcnt);
				}
			} 
			catch(SQLException e)
			{
				e.printStackTrace();
			}
			finally
			{
				try 
				{
					if(rs != null) rs.close();
					if(pstmt != null) pstmt.close();
				} 
				catch (SQLException e) 
				{
					e.printStackTrace();
				}
			}
			return dto;
		}
	
	public PageDTO list(Connection con, String searchName, String searchValue, int curPage)
	{
		PageDTO pageDTO = new PageDTO();
		int perPage = pageDTO.getPerPage();
		int offSet = (curPage - 1) * perPage + 1;
		////////////////////////////////////////////////////////
		List<BoardDTO> list = new ArrayList<BoardDTO>();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try 
		{
			StringBuffer buffer = new StringBuffer();
			buffer.append("SELECT num, title, author, content, to_char(writeday, 'YYYY/MM/dd') as writeday , readcnt");
			buffer.append(" FROM");
			buffer.append(" (");
			buffer.append(" SELECT SEQ, num, title, author, content, writeday, readcnt");		
			buffer.append(" FROM");
			buffer.append(" (");
			buffer.append(" SELECT ROWNUM AS SEQ, num, title, author, content, writeday, readcnt");
			buffer.append(" FROM");
			buffer.append(" (");
			buffer.append(" SELECT num, title, author, content, writeday , readcnt");
			buffer.append(" FROM board");
			
			if("title".equals(searchName) && searchValue != null) 
			{
				buffer.append(" where title LIKE ?");
				buffer.append(" ORDER BY num DESC");
				buffer.append(" )");
				buffer.append(" )");
				buffer.append(" WHERE SEQ >= " + offSet);
				buffer.append(" )");
				buffer.append(" WHERE ROWNUM <= " + perPage);
				pstmt = con.prepareStatement(buffer.toString());
				pstmt.setString(1, "%"+searchValue+"%");

			}
			else if("author".equals(searchName) && searchValue != null)
			{
				buffer.append(" where author LIKE ?");
				buffer.append(" ORDER BY num DESC");
				buffer.append(" )");
				buffer.append(" )");
				buffer.append(" WHERE SEQ >= " + offSet);
				buffer.append(" )");
				buffer.append(" WHERE ROWNUM <= " + perPage);
				pstmt = con.prepareStatement(buffer.toString());
				pstmt.setString(1, "%"+searchValue+"%");

			}
			else 
			{
				buffer.append(" ORDER BY num DESC");
				buffer.append(" )");
				buffer.append(" )");
				buffer.append(" WHERE SEQ >= " + offSet);
				buffer.append(" )");
				buffer.append(" WHERE ROWNUM <= " + perPage);
				pstmt = con.prepareStatement(buffer.toString());
			}
			rs = pstmt.executeQuery();
			while(rs.next()) 
			{
				int num = rs.getInt("num");
			    String title = rs.getString("title");
				String author = rs.getString("author");
				String writeday = rs.getString("writeday");
				int readcnt = rs.getInt("readcnt");
				// 나중에 Builder 패턴
				BoardDTO dto = new BoardDTO();
				dto.setNum(num);
				dto.setTitle(title);
				dto.setAuthor(author);
				dto.setWriteday(writeday);
				dto.setReadcnt(readcnt);
				list.add(dto);
			}
		}
		catch(SQLException e) 
		{
			e.printStackTrace();
		}
		finally 
		{
			try 
			{
				if(rs!=null)rs.close();
				if(pstmt!=null)pstmt.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}	
		}
		////////////////////////////////////////////////////////
		pageDTO.setList(list);
		pageDTO.setCurPage(curPage);
		pageDTO.setTotalRecord(totalRecord(con, searchName, searchValue));
			
		return pageDTO;
	}
	//전체 레코드 반환
	private int totalRecord(Connection con, String searchName, String searchValue)
	{
		int count = 0;
		
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try 
		{
			String sql="select count(*) from board";
			
			if("title".equals(searchName) && searchValue != null) 
			{
				sql += " where title LIKE ?";
				pstmt = con.prepareStatement(sql);
				pstmt.setString(1, "%"+searchValue+"%");

			}
			else if("author".equals(searchName) && searchValue != null)
			{
				sql += " where author LIKE ?";
				pstmt = con.prepareStatement(sql);
				pstmt.setString(1, "%"+searchValue+"%");

			}
			else 
			{
				pstmt = con.prepareStatement(sql);
			}
			
			rs = pstmt.executeQuery();
			if(rs.next()) count = rs.getInt(1);
		}
		catch(SQLException e) 
		{
			e.printStackTrace();
		}
		finally 
		{
			try 
			{
				if(rs!=null)rs.close();
				if(pstmt!=null)pstmt.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}	
		}
		
		return count;
	}
}

4)DTO

package com.dto;

import java.util.List;

public class PageDTO 
{
	//4개의 정보 저장
	private int totalRecord; 	 //전체레코드
	private int curPage;     	 //현재 페이지 번호
	private int perPage = 3; 	 //페이지 당 보여줄 갯수
	private List<BoardDTO> list; //list .jsp에서 보여줄 데이터
	
	
	public int getTotalRecord() {
		return totalRecord;
	}
	public void setTotalRecord(int totalRecord) {
		this.totalRecord = totalRecord;
	}
	public int getCurPage() {
		return curPage;
	}
	public void setCurPage(int curPage) {
		this.curPage = curPage;
	}
	public int getPerPage() {
		return perPage;
	}
	public void setPerPage(int perPage) {
		this.perPage = perPage;
	}
	public List<BoardDTO> getList() {
		return list;
	}
	public void setList(List<BoardDTO> list) {
		this.list = list;
	}
}

5)Service

package com.service;

import java.util.List;

import com.dto.BoardDTO;
import com.dto.PageDTO;

public interface BoardService 
{
	public PageDTO list(String searchName, String seachValue, int curPage);
	public int write(BoardDTO dto);
	public BoardDTO retrieve(int num);
	public int update(BoardDTO dto);
	public int delete(int n);
}
package com.service;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;

import com.dao.BoardDAO;
import com.dto.BoardDTO;
import com.dto.PageDTO;

public class BoardServiceImpl implements BoardService 
{
	//4가지 정보 설정
	String driver = "oracle.jdbc.driver.OracleDriver";
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String userid = "SCOTT";
	String passwd = "TIGER";
	
	public BoardServiceImpl()
	{
		try { Class.forName(driver); } 
		catch (ClassNotFoundException e) { e.printStackTrace(); }
	}
	
	@Override
	public int delete(int n) 
	{
		Connection con = null;
		int num = 0;
		try 
		{
			con = DriverManager.getConnection(url, userid, passwd);
			
			BoardDAO dao = new BoardDAO();
			num = dao.delete(con, n);
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(con != null) con.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		
		return num;
	}
	
	@Override
	public int update(BoardDTO dto) 
	{
		Connection con = null;
		int num = 0;
		try 
		{
			con = DriverManager.getConnection(url, userid, passwd);
			
			BoardDAO dao = new BoardDAO();
			num = dao.update(con, dto);
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(con != null) con.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		
		return num;
	}
	
	@Override
	public int write(BoardDTO dto) 
	{
		Connection con = null;
		int num = 0;
		try 
		{
			con = DriverManager.getConnection(url, userid, passwd);
			
			BoardDAO dao = new BoardDAO();
			num = dao.write(con, dto);
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(con != null) con.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		
		return num;
	}
	
	@Override
	public BoardDTO retrieve(int num) 
	{
		Connection con = null;
		BoardDTO dto = null;
		try 
		{
			con = DriverManager.getConnection(url, userid, passwd);
			
			BoardDAO dao = new BoardDAO();
			dto = dao.retrieve(con, num);
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(con != null) con.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		return dto;
	}

	@Override
	public PageDTO list(String searchName, String seachValue, int curPage) 
	{
		Connection con = null;
		PageDTO PageDTO = null;
		try 
		{
			con = DriverManager.getConnection(url, userid, passwd);
			
			BoardDAO dao = new BoardDAO();
			PageDTO = dao.list(con, searchName, seachValue, curPage);
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(con != null) con.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		return PageDTO;
	}
}

2.mybatis(SQL Mapper)

 : 순수한 JDBC를 편리하고 쉽게 사용 가능하도록 제공

 -외부 라이브러리(*.jar 필요) : mybatis.org

 

 -자바 프로젝트(비웹 환경)

→buildpath : ojdbc.g.jar + mybatis.jar

 

 -jdbc.properties

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.userid=SCOTT
jdbc.passwd=TIGER

 -Configuration.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">
<configuration>

  <!-- jdbc.properties 파일 설정 -->
  <properties resource="com/config/jdbc.properties"></properties>
  
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.userid}"/>
        <property name="password" value="${jdbc.passwd}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/config/DeptMapper.xml"/>
  </mappers>
</configuration>

 -DeptMapper.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="org.mybatis.example.BlogMapper">
  <select id="list" resultType="com.dto.DeptDTO">
  <![CDATA[
   		select deptno, dname, loc
   		from dept
   		order by deptno desc
   ]]>
  </select>
  
  <select id="selectByDeptno" 
  	resultType="com.dto.DeptDTO" parameterType="int">
  	<![CDATA[
   		select deptno, dname, loc
   		from dept
   		where deptno < #{deptno}
   		order by deptno desc
   ]]>
  </select>
  
  <select id="selectByDeptnoAndDname" 
  	resultType="com.dto.DeptDTO" parameterType="com.dto.DeptDTO">
  	<![CDATA[
   		select deptno, dname, loc
   		from dept
   		where deptno < #{deptno} and dname = #{dname}
   		order by deptno desc
   ]]>
  </select>
  
  <select id="selectByDeptnoAndDnameMap" 
  	resultType="com.dto.DeptDTO" parameterType="hashmap">
  	<![CDATA[
   		select deptno, dname, loc
   		from dept
   		where deptno < #{xxx} and dname = #{yyy}
   		order by deptno desc
   ]]>
  </select>
   
</mapper>

 -DeptDTO

package com.dto;

public class DeptDTO 
{
	private int deptno;
	private String dname;
	private String loc;
	
	public DeptDTO() {}
	public DeptDTO(int deptno, String dname, String loc) 
	{
		this.deptno = deptno;
		this.dname = dname;
		this.loc = loc;
	}
	public String toString() 
	{
		return "DeptDTO [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
	}
	//getter
	public int getDeptno() { return deptno; }
	public String getDname() { return dname; }
	public String getLoc() { return loc; }
	//setter
	public void setDeptno(int deptno) { this.deptno = deptno; }
	public void setDname(String dname) { this.dname = dname; }
	public void setLoc(String loc) { this.loc = loc; }
}

 -Main

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

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

import com.dto.DeptDTO;

public class DeptMain {

	public static void main(String[] args) 
	{
		//Mybatis DB 연동
		
		//1.Configuration.xml 읽기
		String resource = "com/config/Configuration.xml";
		InputStream inputStream = null;
		try 
		{
			inputStream = Resources.getResourceAsStream(resource);
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		}
		SqlSessionFactory x = new SqlSessionFactoryBuilder().build(inputStream);
		
		//2.sqlSessionFactory 에서 SqlSession 얻기
		SqlSession session = x.openSession();
		/*
			SqlSession 메서드
			 1)select
			   //여러 레코드 반환시
			   List list = Session.selectList(String id);
			   List list = Session.selectList(String id, Object objs); objs : where절에 사용할 값
			   List list = Session.selectList(String id, Object objs, RowBounds k); RowBounds : 페이징 처리시 사용
			   
			   //하나 레코드 반환시 ==> PK 조건 지정, 그룹함수 등
			   T x = session.selectOne(String id);
			   T x = session.selectOne(String id, Object dbj);
			 
		 */
		//1.id="list" 전체목록
		List<DeptDTO> list = session.selectList("list");
		System.out.println(list);
		
		//2.id="selectByDeptno" 호출
		int deptno = 40;
		List<DeptDTO> list2 = session.selectList("selectByDeptno", deptno);
		System.out.println(list2);
		
		//3.id="selectByDeptnoAndDname" 호출
		DeptDTO dto = new DeptDTO();
		dto.setDeptno(40);
		dto.setDname("SALES");
		List<DeptDTO> list3 = session.selectList("selectByDeptnoAndDname", dto);
		System.out.println(list3);
		
		//4.id="selectByDeptnoAndDnameMap" 호출
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("xxx", 40);
		map.put("yyy", "SALES");
		dto.setDeptno(40);
		dto.setDname("SALES");
		List<DeptDTO> list4 = session.selectList("selectByDeptnoAndDnameMap", map);
		System.out.println(list4);
        
        //		//5.id="listPage" 호출
//		//List list = Session.selectList(String id, Object objs, RowBounds k);
//		//Paging 처리
//		DeptDTO dto = new DeptDTO();
//		dto.setDeptno(40);
//		dto.setDname("SALES");                                     //offset(시작위치), limit(갯수)
//		List<DeptDTO> list4 = session.selectList("listPage", null, new RowBounds(1, 2));
//		System.out.println(list4);
		
		//6.id="selectOneByDeptno"
		DeptDTO dto = session.selectOne("selectOneByDeptno", 40);
		System.out.println(dto);
		
		//최종적으로 session을 close해야 됨
		session.close();
	}

}

 -웹 프로젝트(웹 환경)

→lib에 복사 : ojdbc.g.jar + mybatis.jar