* Oracle Sequence

1. 순차적으로 자동증가 하는 값을 새성하는 오라클 객체
2. 구문
CEATE SEQUENCE sequence_name
[START WITH n]
[INCREMENT BY n]
[MAXVALUE | NOMAXVALUE]
[MINVALUE | NOMINVALUE]
[CYCLE | NOCYCLE]

DROP SEQUENCE sequence name

예) 아래와 같이 하면 1부터 10까지 증가 하고 10이 되면 다시 1로 가서 1부터 10까지 증가하는 순으로 계속 반복된다.
create sequence test_seq
start with 1
increment by 1
maxvalue 10
cycle

3. sequence_name.nextval
 - 시퀀스가 가진 값을 증감한 값 조회
4. sequence_name.currval
 - 시퀀스가 현재 가진 값 조회

 

* 실행 결과

 

 

* table에 sequence값 삽입하기

* max값 지정하기

 

 

 

* cycle지정(nocache : 다음에 가져올 값을 메모리에 미리 저장해 놓고 가져옴)

 

 

 

 

Posted by 조은성
,

 

board.zip

* 컬럼

title(글제목)
writer(작성자)
content(내용)
no->pk(글번호)
searchCount(조회수)
registDate(글등록날짜)

* 답변 컬럼

refamily : 원본글과 답변에 대한 그룹 묶음
restep : 같은 그룹끼리의 정렬(순서)을 관리
relevel : 답변에 대한 디자인을 처리하기위한 것(내가 답변하고자 하는 레벨+1(답변시 한칸씩 옆으로 밀리는 모습))

 

 

 

* [실습]
dynamic web project
name :  board_fc
lib : jstl 라이브러리 copy

File
WebContent\WEB-INF\board.sql

* 게시판 생성시 필요한 컬럼 정보

테이블 - 게시판(board)
속성
no   :  number - primary key : 글번호
title   :  varchar2(150) - nut null : 글제목
writer  :  varchar2(30) - not null : 글작성자
content  :    varchar2(4000) - not null : 글내용
writedate :   varchar2(14) - not null : 글작성(수정) 일시 (yyyyMMddHHmmss)
viewcount :  number - not null : 조회수(최초입력 : 0, 조회시마다 1씩 증가)
----------답변과 관련된 속성----------
refamily  : number - not null : 원본글 기준으로 그 답변 글들을 묶은 그룹번호
              기분글(최초 원본글) - 새로운 값(글번호)
              답변글 : 답변하는 글의 refamily값
restep   : number - not null : 같은 refamily로 묶인 글들 사이에서의 정렬 순서
              기준글 : 0
              답변글 : 답변하는 글의 restep값 + 1
relevel  : number - not null : 답변 레벨
              기준글 : 0
              답변글 : 답변하는 글의 relevel + 1
             
시퀀스 - 게시판 글번호를 위한 자동증가 시퀀스
이름 : board_no_seq : 0~무한대, 1씩 증가

* table 생성 쿼리

             
create table board(
 no number,
 title varchar2(150) not null,
 writer varchar2(30) not null,
 content varchar2(4000) not null,
 writedate varchar2(14) not null,
 viewcount number not null,
 --답변과 관련된 속성
 refamily number not null,
 restep number not null,
 relevel number not null,
 constraint board_pk primary key(no)
)
select * from board;
drop table board;

drop sequence board_no_seq;
create sequence board_no_seq;
select board_no_seq.nextval from dual;

interface
package : board.controller
name : Controller
          BoardFrontController : mapping - /boardController

class : ForwardDTO, ControlerCommandMapping, BoardDTO

---------새글 작성------------

write_form.jsp
controller -> BoardController -> WriteContentController
BusinessService -> BoardService.writeContent(BoardDTO)
DAO -> BoardDAO.selectBoardNo : 글번호 조회
            BoardDAO.insertContent(BoardDTO) - 새글, 답변글
응답 -> show_content.jsp : 정상처리
           error.jsp : 오류 발생시

* BoardService와 BoardDAO는 싱글턴패턴으로 만들어라.

 

* utility 만들기
class
package : board.util
name : DBUtil
           Utilities

 

Posted by 조은성
,

 

 

 

 

 

 

 

 

 

 

 

 

* DTO

 

 

 

* exception

 

 

 

*DAO

 

 

* util

 

 

* service

 

 

* res

 

 

 

 

 

 

 

 

* WEB-INF

 

 

 

* WebContent

 

 

 

 

 

 

 

 

* 결과보기

 

* 전체소스(내꺼)

member_servlet_fc.zip

강사님 소스

member_servlet_fc.zip

 

* ControllerCommandMapping 만들기

 

 

Posted by 조은성
,

* FrontController 패턴

1. Client의 요청을 집중 시키는 앞단 client
    -> Controller들의 공통 로직을 앞단에서 처리
    -> 모든 client의 요청을 한 곳에 집중시킴


* Front Controller :  Controller의 공통적인 작업을 모아서 처리한다.(사 전 : Filter, 사 후)

[실습]
dynamic web project
 - member_servlet_fc

copy
src
member.dto
member.model.dao
member.model.exception
member.model.service
member.util

servlet
package : member.controller
Class name : MemberFrontController
url-pattern : /controller

interace
package : member.controller
name : Controller

 

 

 

 

 

 

 

 

 

 * 결과보기

 

 

 

 

 

 

 

 

* 결과보기

 

Posted by 조은성
,

 

member_servlet_mvc.zip

----------수정처리--------------------------

시작 : modify_form.jsp - 주민번호 입력 부분 수정
Controller : ModifyMemberServlet
Service : MemberManageService.modifyMember(MemberDTO)
DAO : DAO.updateMember(MemberDTO)
응답 : 성공 : member_list.jsp
         실패 : login안되서 - login_form.jsp
                  exception - error.jsp

 

 

 

 

 

 

 

 

 

--------탈퇴처리----------------------------

시작 : member_detail.jsp 에서 탈퇴 링크 클릭시
Controller : RemoveMemberServlet(DB삭제처리, session 종료)
Service : removeMemberById(id) : void
DAO : deleteMemberById(id) : void

응답 : 성공 : login_form.jsp
         실패 : 로그인이 안된 경우 : login_form.jsp(에러메세지 가지고 이동)
                  exception 이 나서 실패한경우 : error.jsp

 

 

 

 

 

 

 

* 결과보기

 

 

 

 

 

Posted by 조은성
,

 

member_servlet_mvc.zip

 

WebContent
    res

 

 

 

 

 

 

 

WEB-INF

 

 

 

 

 

 

 

 

java Resources
     src
member.dto

 

member.exception

 

 

member.filter

 

member.listener

 

member.model.dao

 

member.servlet

 

 

 

 

 

 

 

 

member.util

 

memver.model.service

 

Posted by 조은성
,

* 쿼리에서 문자열 더하고 넣는 방법.

preparestatement에서 like 구문 사용하는 법 :

select * from member where name like '%'||?||'%';
pstmt.setString(1,name);

일반 문자열 더하는 법 : "a"+"b"
쿼리에서 문자열 더하는 법 : 'a'||'b'

-> 주말에 위에것 사용해서 이름으로 모든 정보 조회하기 해보기!

* 결과보기

 

 

* 소스보기

 

 

 

 

 

 

 

 

 

 

 

Posted by 조은성
,

 


member_servlet_mvc.zip

[힌트]
forward.jsp -> 요청파라미터를 읽어서 requestScope에 binding 한뒤 Servlet으로 이동

RegisterMemberServlet : 완성
register_success.jsp : 수정(주민번호 수정)
한글처리 : - Filter
class :
package : member.filter
class name : EncodingFilter

 

 

 

 

 

 

 

 

 

 

 

 

 * 결과보기

 

* 전체 회원 정보 조회하기

메뉴 -> (/getAllMemberInfo)
->GetAllMemberSerlvet
->MemberManagerService.getMemberList() ; ArrayList<MemberDTO>
->MemberDAO.selectAllMember() ; ArrayList<MemberDTO>

->응답 : error.jsp, member_list.jsp

 

 

 

 

 

 

 

 

 

 

 

 

 * 결과 보기

 

* 검색 : 마일리지 범위로 회원정보 조회하기

search_form.jsp(검색 조건 입력페이지) - 요청 파라미터 : 시작~끝 마일리지
->SearchByMileageRangeServlet() - url : /searchByMileageRange
->MemberManagerService.searchMemberByMileageRange(int start, int end) : ArrayList<MemberDTO>
->MemberDAO.selectMemberByMileageRange(int start, int end) : ArrayList<MemberDTO>

응답 -> search_result.jsp, error.jsp

 

 

 

 

 

 

 

 

 

 

 

 

 

* 결과보기

 

 

 

* 쿼리에서 문자열 더하고 넣는 방법.

select * from member where name like '%'||?||'%';

pstmt.setString(1,name);

"a"+"b"
'a'||'b'

-> 주말에 위에것 사용해서 이름으로 모든 정보 조회하기 해보기!

 

* 로그인 처리
login_form.jsp
-> LoginServlet - Business Logic처리, session처리
->Service.getMemberById(String id) : MemberDTO
->DAO.selectMemberbyId(String id) : MemberDTO

응답 : login_success.jsp(로그인 성공) login_form.jsp(실패)
         error.jsp(exception)

 

 

 

 

 

 

 

 

 * 결과

 

 

 

Posted by 조은성
,

BasicDataSource ?
- org.apache.tomcat.dbcp.dbcp.BasicDataSource
- tomcat에서 제공하는 Connection Pool


BasicDataSource의 메서드
DB Connection 관련 설정
- setDriverClassName(String className) // DB Driver를 className으로 설정
- setUrl(String url) // DB 연결정보 URL을 url으로 설정
- setUsername(String user) // DB 연결에 필요한 Username을 user로 설정
- setPassword(String password) // DB 연결에 필요한 Password를 password로 설정

Connection Pool 관련 설정
- setInitialSize(int initialSize); // 초기에 생성될 커넥션 객체의 수. default : 0
- setMaxActive(int maxActive); // 최대 몇개의 커넥션 객체를 만들 것인지 설정. default : 8
- setMaxIdle(int maxIdle); // 사용되지 않고 대기하는 커넥션 객체의 최대 개수.
maxIdle보다 많이 대기시 maxIdle수에 맞게 Connection을 close. default : 0
- setMinIdle(int minIdle); // 사용되지 않고 대기하는 커넥션 객체의 최소 개수. default : 0

 

Posted by 조은성
,

Connection Pool ?
Connection Pool의 필요성
- DBMS로의 연결이 오래걸림
- DB 작업을 할 때마다 Connection ~ Close 까지의 반복 작업이 비효율적
- Connection Pool에 Connection 객체를 생성해 놓고 DB 작업시 Pool에서 빌려 사용후 다시 반납

Connection Pool의 개념
- Connection을 관리하는 객체 Pool
- Connection들을 미리 생성하여 Pool에 저장한 뒤 필요시 빌려쓰는 개념
- 사용 후에는 다시 Connection Pool에 반납

Connection Pool의 사용
- 직접 제작하여 사용 / 제공되는 API를 이용
- 대표적인 API : org.apache.tomcat.dbcp.dbcp.BasicDataSource


DataSource ?
- Connection Pool을 구현하기 위한 스펙을 정해놓은 Interface
- Connection Factory (Connection 객체를 생성해 주는 역할)
- javax.sql.DataSource를 import 해서 사용

DataSource의 장점?
- Connection Pool 지원
- 객체가 DB 연결에 필요한 정보를 알고 있어 DB연결시 URL, ID, Password를 입력해야 하는 번거로움 해소

Posted by 조은성
,