본문 바로가기

자바프레임워크

프로그램을 처음부터 손으로 해야하는 이유는 게시판 자동번호입력기능

반응형
SMALL

스프링이 어려운 이유

내부가 어떻게 돌아가는지 모른다.

유저 데피니션을 직접 짜기 때문에 

팩토리 메소드 패턴으로 직접 손으로 짜기 때문에 

핸들러맵핑


나중에는 라이브러리를 이용해서 더 빠르게 진행된다.


-------

시퀀스는 제목에 따라 자동으로 DB에서 넘버링 번호가 매겨진다.


CREATE sequence

test_seq

start with

1 increment by 1

maxvalue 5

minvalue -1

nocycle

nocache;

-----------

CREATE TABLE test(no number primary key, name varchar2(40))

/

INSERT INTO test (no, name) VALUES(test_seq.nextVal, '보아');

INSERT INTO test (no, name) VALUES(test_seq.nextVal, '세븐');
INSERT INTO test (no, name) VALUES(test_seq.nextVal, '비);

select test-seq.currVal FROM test

select test-seq.currVal FROM test
select test_seq.currVal FROM test;
select currVal FROM test;

insert into test values(test_seq.nextVal,'성동일');

Sequence::

테이블 내 유일한 숫자로 디비에서 자동증가되는 값
게시판의 글번호를 지정할때 사용
순차적으로 자동으로 증가하는 값으로 일종의 오라클에서 제공하는 객체이다.
<<사용문법>>
CREATE SEQUNCE sequnce_name
[START WITH N] 
[INSEREMENT BY n]
[ MAXVALUE n | NOMAXVALUE ]
 [MINVALUE n | NO MINVALUE ]
[NOCYCLE | CYCLE]
[CACHE | NOCACHE]

시퀀스 삭제 
DROP SEQUENCE sequence_name;

게시판의 대부분 생성시 노캐쉬가 디폴트이다.

게시판 생성용  테이블 만들 -
CREATE TABLE board(
no number primary key,
title varchar2(50) not null,
write varchar2(30) not null,
passwoard varchar2(30) not null,
content varchar2(3000) not null,
hits number default 0,
time_posted date not null,);
CREATE SEQUENCE board_seq
start with 1
increment by 1
nocache;
------------------
CREATE SEQUENCE board_seq
start with 1
increment by 1
nocache;

---------
이클립스 자바에서 다이나믹 웹프로젝트 생성
클래스 생성
기본     
sql 쿼리문을 별도로 분리시키겠다 interface 기반으로 나중에는 xml 기반으로

package model;
//테이블의 한 줄을 insert
public class BoardVO {
private int no;
private String title;
private String wirte;
private String password;
private String content;
private String hits;
private String timePosted; // 컬럼명은 time_posted이다 기억
DAO , VO 만 있는 상태에서 나머지는 갖다 붙인다.

*단위테스트를 위해 직접 리소스 티어 디비와 DAO를 별도로 작업
쿼리문을 수행하는 DAO 만 단위 테스트 먼저 한다.
컴파일이 안잡히는 쿼리문의 단점이 있다.

비지니스 로직과 커낵션풀(웹기반)은 너무 복잡하기 때문에 나중에 해본다.

드라이버 매니져 방식의 단위 테스트를 먼저 선택
나중에 웹기반에 적용하는 것으로 단위테스트를 시행한다.

config
package config;

public interface OracleInfo {
String DRIVER="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@127.0.0.1:1521:xe";
String user="scott";
String Pass="tiger";

-----------
현업에서 말하는 비지니스 로직은 db와 연계되는 부분을 표현한다.
resource layer
 db + board

board DAO

BOARD VO
--------------------------
Context.xml 
쿼리문도 xml에 메타데이터화를 Interface화 시켜서 적용 분리한다.
스트링값과 코드를 분리해서 재사용성을 높인다.
나중에 유지보수를 위해 Context.xml만 수정 재사용 가능하다.
------------------------------------
쿼리문의 에러를 잡기 힘들기 때문에 실행해서 db에서 최종적용이 정상적으로 수행이 되는지 일일이 확인한다.
---------
생성자 꽉찬거 하나 기본 하나 
별도 생성
---------------
boardVO에서는 넘버링이 안돼기 때문에
인서트에서 DB에서만 증가
인서트 쿼리문을 별도 추가해서 boardVO에서도 넘버링을 적용한다.
-----------
스트링 쿼리 인터페이스 별도 작성
package model;
/*
 * 비지니스 로직에 사용될 쿼리문만 따로 모아둔 인터페이스
 * 추상메소드. 상수
 * dao에서는 비지니스 로직에 사용되는 쿼리문이 많이 들어간다
 * 이런 점 때문에 dao 의 로직은 길어지고 재사용성이 떨어진다.
 * 왜냐면 쿼리문이 변경, 추가될때마다 로직을 불가피하게 건드려야하기 때문이다.
 * 코드와 쿼리문을 분리시키겠다.
 * 메타데이터화 .. 최종적으로는 xml 기반으로 갈 것이다 이것을
 * IBatis /Mybatis라 불른다
 * 
 */

public interface StringQueary {
String INSERT_POSTING=
"INSERT INTO board(no, title, writer,password,content,time_posted) VALUES(board_seq.nextVal,?,?,?,?,sysdate)";
}

----------------
package model;

import java.sql.Connection;
import java.sql.DriverManager;

import config.OracleInfo;
/*
 * DataSource瑜�李얠븘��꽌...
 * getConnection() ���듯빐 Connection��由ы꽩諛쏅룄濡��쒕떎.
 */
public class DataSourceManager {
private Connection conn;
private static DataSourceManager instance=  new DataSourceManager();
private DataSourceManager(){
try{
Class.forName(OracleInfo.DRIVER);
System.out.println("�쒕씪�대쾭 濡쒕뵫...");
conn = DriverManager.getConnection(OracleInfo.URL,"scott","tiger");
System.out.println("�쒕쾭�곌껐 �깃났...");
}catch(Exception e){
e.printStackTrace();
}
}
public static DataSourceManager getInstance(){
return instance;
}
public Connection getConnection(){
return conn;
}
}

-------------------
package model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class BoardDao {
//private Connection conn;
private static BoardDao dao = new BoardDao();
private BoardDao(){}
public static BoardDao getInstance(){
return dao;
}
public Connection getConnection() throws SQLException{
return DataSourceManager.getInstance().getConnection();
}
public void closeAll(PreparedStatement ps, Connection conn) throws SQLException{
if(ps!=null)
ps.close();
if(conn !=null)
conn.close();
}
public void closeAll(ResultSet rs,PreparedStatement ps, Connection conn) throws SQLException{
if(rs != null)
rs.close();
closeAll(ps, conn);
}
/////////////////////////////////////Business Login/////////////////////////////
/*
* 寃뚯떆�먯쓽 湲�쓣 �묒꽦�섎뒗 濡쒖쭅..
*/
public void posting(BoardVO vo)throws SQLException{

}//posting()�リ퀬.

public BoardVO getPostingByNo(int no) throws SQLException{
BoardVO vo = null;
return null;
}//
/*
public ArrayList<BoardVO> getPostingList() throws SQLException{
}//
public boolean checkPassword(int no,String password)throws SQLException{
} //
public void deletePosting(int no)throws SQLException{
}//
public void updatePosting(BoardVO vo)throws SQLException{

}*/
public static void main(String[] ar)throws Exception{
BoardDao.getInstance().posting(
new BoardVO("泥ル쾲吏�湲�, "�섎컮由�, "777", "�ㅻ뒛��遺덇툑"));
}
}

















반응형
LIST

'자바프레임워크' 카테고리의 다른 글

frameworks 기초과정  (0) 2014.09.16
sql board  (0) 2014.09.15
무료 데이터 시각화 및 분석 툴 30선 : 차트  (0) 2014.09.12
자바-쿠키생성  (0) 2014.09.11
컴퓨터랭귀지  (0) 2014.09.11