1. board 테이블 작성
-- 게시판 테이블 작성
create table board
( num NUMBER(4) CONSTRAINT board_num_pk PRIMARY KEY,
title VARCHAR2(200) CONSTRAINT board_title_nn NOT NULL,
author VARCHAR2(20) CONSTRAINT board_author_nn NOT NULL,
content VARCHAR2(400),
writeday DATE DEFAULT SYSDATE,
readcnt NUMBER(4) DEFAULT 0);
create sequence board_seq;
insert into board ( num, title, author, content )
values ( board_seq.nextval , '테스트', '홍길동', '테스트입니다' );
commit;
2. 오라클 + mybatis 연동
⇒ 프로젝트 생성후 WEB-INF/lib 폴더에 2개의 jar 복사
3. 4가지 정보를 가진 jdbc.properties 작성 (com.config 패키지)
4. BoardMapper.xml 작성 (com.config 패키지)
- 게시판 전체 목록 조회 기능
게시판 전체 목록 조회 기능
5. BoardDTO.java 작성 (com.dto 패키지)
6. Configuration.xml 작성 (com.config 패키지)
- jdbc.properties 등록 및 ${} 설정
- BoardDTO 별칭
- BoardMapper.xml 등록
7. MySqlSessionFactory.java 작성 (com.config 패키지)
- Configuration.xml 지정해서 읽고
- SqlSession 반환
======================================⇒ ✅ 기본준비 완료

8. BoardDAO.java (com.dao 패키지)
- BoardServiceImpl에서 전달해준 SqlSession과 파라미터(옵션)를 이용해서 실제 DB와 연동.
9. BoardService.java와 BoardServiceImpl.java 작성 (com.service 패키지)
- BoardDAO 메서드를 복사해서 SqlSession 파라미터를 제거한다.
- BoardDAO 연동
10. BoardListServlet.java 작성 ( com.controller 패키지)
- BoardService 연동해서 화면에 보여줄 데이터를 반환
- 데이터를 scope에 저장
request scope
session scope
application scope
- jsp에 요청위임
forward
redirect
11. list.jsp 작성
- BoardListServlet 에서 scope에 저장된 데이터를 얻어서 화면에 출력
=======================================⇒ ✅ DB 연동 완료
테이블 꾸미기
jdbc.properties
#주ì문
# jdbc.properties
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=SCOTT
jdbc.password=TIGER
BoardMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="BoardMapper">
<select id="list" resultType="BoardDTO">
select num, title, author, content, writeday, readcnt
from board
order by num desc
</select>
</mapper>
BoardDTO.java
package com.dto;
public class BoardDTO {
int num; //글번호
String title; //제목
String author; //작성자
String content; //내용
String writeday; //작성일
int readcnt; //조회수
public BoardDTO() { }
public BoardDTO(int num, String title, String author, String content, String writeday, int readcnt) {
super();
this.num = num;
this.title = title;
this.author = author;
this.content = content;
this.writeday = writeday;
this.readcnt = readcnt;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getWriteday() {
return writeday;
}
public void setWriteday(String writeday) {
this.writeday = writeday;
}
public int getReadcnt() {
return readcnt;
}
public void setReadcnt(int readcnt) {
this.readcnt = readcnt;
}
@Override
public String toString() {
return "BoardDTO [num=" + num + ", title=" + title + ", author=" + author + ", content=" + content
+ ", writeday=" + writeday + ", readcnt=" + readcnt + "]";
}
}
configuration.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 주석 -->
<!-- jdbc.properties 등록 -->
<properties resource="com/config/jdbc.properties"></properties>
<typeAliases>
<typeAlias alias="BoardDTO" type="com.dto.BoardDTO"/>
</typeAliases>
<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.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/config/BoardMapper.xml"/>
</mappers>
</configuration>
MySqlSessionFactory.java
package com.config;
import java.io.IOException;
import java.io.InputStream;
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 MySqlSessionFactory {
static SqlSessionFactory sqlSessionFactory = null;
static {
String resource = "com/config/Configuration.xml";
InputStream inputStream=null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
}//end static 블럭
// ServiceImpl에서 필요한 SqlSession 리턴하는 메서드
// new 없이 사용하기 위해서 static 지정한다.
public static SqlSession getSession() {
SqlSession session =
sqlSessionFactory.openSession();
return session;
}
}
BoardDAO.java
package com.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.dto.BoardDTO;
public class BoardDAO {
// 전체 목록
public List<BoardDTO> list(SqlSession session){
List<BoardDTO> list = session.selectList("BoardMapper.list");
return list;
}
}
BoardService.java
package com.service;
import java.util.List;
import com.dto.BoardDTO;
public interface BoardService {
public List<BoardDTO> list();
}
BoardServiceImpl.java
package com.service;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.config.MySqlSessionFactory;
import com.dao.BoardDAO;
import com.dto.BoardDTO;
public class BoardServiceImpl implements BoardService {
@Override
public List<BoardDTO> list() {
List<BoardDTO> list = null; //return 하기 위해 밖에서 선언
SqlSession session = MySqlSessionFactory.getSession();
try {
// DAO 연동코드
BoardDAO dao = new BoardDAO(); //객체생성
list = dao.list(session);
}finally {
session.close();
}
return list;
}
}
BoardListServlet.java
package com.controller;
import java.io.IOException;
import java.util.List;
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;
/**
* Servlet implementation class BoardListServlet
*/
@WebServlet("/list")
public class BoardListServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//BoardService 연동
BoardService service = new BoardServiceImpl();
List<BoardDTO> list = service.list(); //다형성
// 이전에는 서블릿에서 응답처리를 했음. => list.jsp한테 위임
// list.jsp 에서 List<BoardDTO>를 보여주기 위해서는
// List<BoardDTO>를 scope에 저장해야 된다. 목록보기는 request scope가 가장 최적임.
/*
* request scope ( <=여기에 저장 )
* session scope
* application scope
*/
request.setAttribute("boardList", list);
// 요청위임. 목록보기는 request scope에 저장했기 때문에 포워드로 사용.
/*
* 포워드(forward) <= 사용
* 리다이렉트(redirect)
*/
request.getRequestDispatcher("list.jsp").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>Insert title here</title>
</head>
<body>
<h2>게시판 목록보기</h2>
<%
List<BoardDTO> list
= (List<BoardDTO>)request.getAttribute("boardList");
%>
<table border="1">
<tr>
<th>글번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</tr>
<%
for(BoardDTO dto: list){
int num = dto.getNum();
String title = dto.getTitle();
String author = dto.getAuthor();
String writeday = dto.getWriteday();
%>
<tr>
<td><%= num %></td>
<td><%= title %></td>
<td><%= author %></td>
<td><%= writeday %></td>
<td><%= dto.getReadcnt() %></td>
</tr>
<%
}
%>
</table>
</body>
</html>
💡 최종결과
'Programming Language > JSP' 카테고리의 다른 글
게시판 구축 프로젝트(3) - 글 자세히 보기 (0) | 2023.08.18 |
---|---|
게시판 구축 프로젝트(2) - 글쓰기 (0) | 2023.08.18 |
내장객체 (내장변수) (0) | 2023.08.17 |
JSP tag (0) | 2023.08.17 |
JSP (0) | 2023.08.17 |
1. board 테이블 작성
-- 게시판 테이블 작성
create table board
( num NUMBER(4) CONSTRAINT board_num_pk PRIMARY KEY,
title VARCHAR2(200) CONSTRAINT board_title_nn NOT NULL,
author VARCHAR2(20) CONSTRAINT board_author_nn NOT NULL,
content VARCHAR2(400),
writeday DATE DEFAULT SYSDATE,
readcnt NUMBER(4) DEFAULT 0);
create sequence board_seq;
insert into board ( num, title, author, content )
values ( board_seq.nextval , '테스트', '홍길동', '테스트입니다' );
commit;
2. 오라클 + mybatis 연동
⇒ 프로젝트 생성후 WEB-INF/lib 폴더에 2개의 jar 복사
3. 4가지 정보를 가진 jdbc.properties 작성 (com.config 패키지)
4. BoardMapper.xml 작성 (com.config 패키지)
- 게시판 전체 목록 조회 기능
게시판 전체 목록 조회 기능
5. BoardDTO.java 작성 (com.dto 패키지)
6. Configuration.xml 작성 (com.config 패키지)
- jdbc.properties 등록 및 ${} 설정
- BoardDTO 별칭
- BoardMapper.xml 등록
7. MySqlSessionFactory.java 작성 (com.config 패키지)
- Configuration.xml 지정해서 읽고
- SqlSession 반환
======================================⇒ ✅ 기본준비 완료

8. BoardDAO.java (com.dao 패키지)
- BoardServiceImpl에서 전달해준 SqlSession과 파라미터(옵션)를 이용해서 실제 DB와 연동.
9. BoardService.java와 BoardServiceImpl.java 작성 (com.service 패키지)
- BoardDAO 메서드를 복사해서 SqlSession 파라미터를 제거한다.
- BoardDAO 연동
10. BoardListServlet.java 작성 ( com.controller 패키지)
- BoardService 연동해서 화면에 보여줄 데이터를 반환
- 데이터를 scope에 저장
request scope
session scope
application scope
- jsp에 요청위임
forward
redirect
11. list.jsp 작성
- BoardListServlet 에서 scope에 저장된 데이터를 얻어서 화면에 출력
=======================================⇒ ✅ DB 연동 완료
테이블 꾸미기
jdbc.properties
#주ì문
# jdbc.properties
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=SCOTT
jdbc.password=TIGER
BoardMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="BoardMapper">
<select id="list" resultType="BoardDTO">
select num, title, author, content, writeday, readcnt
from board
order by num desc
</select>
</mapper>
BoardDTO.java
package com.dto;
public class BoardDTO {
int num; //글번호
String title; //제목
String author; //작성자
String content; //내용
String writeday; //작성일
int readcnt; //조회수
public BoardDTO() { }
public BoardDTO(int num, String title, String author, String content, String writeday, int readcnt) {
super();
this.num = num;
this.title = title;
this.author = author;
this.content = content;
this.writeday = writeday;
this.readcnt = readcnt;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getWriteday() {
return writeday;
}
public void setWriteday(String writeday) {
this.writeday = writeday;
}
public int getReadcnt() {
return readcnt;
}
public void setReadcnt(int readcnt) {
this.readcnt = readcnt;
}
@Override
public String toString() {
return "BoardDTO [num=" + num + ", title=" + title + ", author=" + author + ", content=" + content
+ ", writeday=" + writeday + ", readcnt=" + readcnt + "]";
}
}
configuration.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 주석 -->
<!-- jdbc.properties 등록 -->
<properties resource="com/config/jdbc.properties"></properties>
<typeAliases>
<typeAlias alias="BoardDTO" type="com.dto.BoardDTO"/>
</typeAliases>
<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.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/config/BoardMapper.xml"/>
</mappers>
</configuration>
MySqlSessionFactory.java
package com.config;
import java.io.IOException;
import java.io.InputStream;
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 MySqlSessionFactory {
static SqlSessionFactory sqlSessionFactory = null;
static {
String resource = "com/config/Configuration.xml";
InputStream inputStream=null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
}//end static 블럭
// ServiceImpl에서 필요한 SqlSession 리턴하는 메서드
// new 없이 사용하기 위해서 static 지정한다.
public static SqlSession getSession() {
SqlSession session =
sqlSessionFactory.openSession();
return session;
}
}
BoardDAO.java
package com.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.dto.BoardDTO;
public class BoardDAO {
// 전체 목록
public List<BoardDTO> list(SqlSession session){
List<BoardDTO> list = session.selectList("BoardMapper.list");
return list;
}
}
BoardService.java
package com.service;
import java.util.List;
import com.dto.BoardDTO;
public interface BoardService {
public List<BoardDTO> list();
}
BoardServiceImpl.java
package com.service;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.config.MySqlSessionFactory;
import com.dao.BoardDAO;
import com.dto.BoardDTO;
public class BoardServiceImpl implements BoardService {
@Override
public List<BoardDTO> list() {
List<BoardDTO> list = null; //return 하기 위해 밖에서 선언
SqlSession session = MySqlSessionFactory.getSession();
try {
// DAO 연동코드
BoardDAO dao = new BoardDAO(); //객체생성
list = dao.list(session);
}finally {
session.close();
}
return list;
}
}
BoardListServlet.java
package com.controller;
import java.io.IOException;
import java.util.List;
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;
/**
* Servlet implementation class BoardListServlet
*/
@WebServlet("/list")
public class BoardListServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//BoardService 연동
BoardService service = new BoardServiceImpl();
List<BoardDTO> list = service.list(); //다형성
// 이전에는 서블릿에서 응답처리를 했음. => list.jsp한테 위임
// list.jsp 에서 List<BoardDTO>를 보여주기 위해서는
// List<BoardDTO>를 scope에 저장해야 된다. 목록보기는 request scope가 가장 최적임.
/*
* request scope ( <=여기에 저장 )
* session scope
* application scope
*/
request.setAttribute("boardList", list);
// 요청위임. 목록보기는 request scope에 저장했기 때문에 포워드로 사용.
/*
* 포워드(forward) <= 사용
* 리다이렉트(redirect)
*/
request.getRequestDispatcher("list.jsp").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>Insert title here</title>
</head>
<body>
<h2>게시판 목록보기</h2>
<%
List<BoardDTO> list
= (List<BoardDTO>)request.getAttribute("boardList");
%>
<table border="1">
<tr>
<th>글번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</tr>
<%
for(BoardDTO dto: list){
int num = dto.getNum();
String title = dto.getTitle();
String author = dto.getAuthor();
String writeday = dto.getWriteday();
%>
<tr>
<td><%= num %></td>
<td><%= title %></td>
<td><%= author %></td>
<td><%= writeday %></td>
<td><%= dto.getReadcnt() %></td>
</tr>
<%
}
%>
</table>
</body>
</html>
💡 최종결과
'Programming Language > JSP' 카테고리의 다른 글
게시판 구축 프로젝트(3) - 글 자세히 보기 (0) | 2023.08.18 |
---|---|
게시판 구축 프로젝트(2) - 글쓰기 (0) | 2023.08.18 |
내장객체 (내장변수) (0) | 2023.08.17 |
JSP tag (0) | 2023.08.17 |
JSP (0) | 2023.08.17 |