[Spring / BootStrap] Spring Legacy MVC Project로 게시판 및 채팅 기능 구현 - 3 (DB연결 및 VO 생성)
리트리버J
·2021. 1. 10. 01:00
1. 의존성 주입
pom.xml에 Oracle, Mybatis, Connetion Pool 관련 dependency를 추가해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
<!-- Oracle DataBase & Mybatis & Connection Pool -->
<!-- 1. 프로젝트 생성 후 추가적으로 등록하는 DB관련(오라클,마이바티스) 라이브러리들 -->
<!-- 1_1. DataBase 오라클 사용을 위한 라이브러리 -->
<!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
<!-- 1_2. Mybatis 순수 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- 1_3. 스프링에서 Mybatis를 사용하기 위한 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 1_4. 스프링 데이터베이스 기능을 사용하기 위한 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<!-- <version>5.2.1.RELEASE</version> -->
<version>${org.springframework-version}</version><!-- 위의 properties에 지정한 변수로 버전을 일치시킨다. -->
</dependency>
<!-- 1_5. 커넥션 풀 기능을 사용하기 위한 라이브러리 -->
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- // Oracle DataBase & Mybatis & Connection Pool -->
|
cs |
2. SQL Developer에서 계정을 생성한다.
1
2
3
4
5
|
CREATE USER TUTORIAL IDENTIFIED BY TUTORIAL;
GRANT CONNECT, RESOURCE TO TUTORIAL;
-- CONNECT : 접속 권한
-- RESOURCE : 객체(생성, 수정, 삭제) 및 데이터 DML 권한
-- (DBA)도 있지만, 이 권한은 굳이 줄 필요는 없다. (아주 강력한 권한이다.)
|
cs |
3. 게시판 TABLE 및 SEQUENCE 생성
3-1. 게시글 내용의 DATA TYPE은 SUMMERNOTE를 사용할 것이기 때문에 CLOB으로 한다.
( 사진파일이 텍스트 형태로 들어가기 때문에 굉장히 길어진다!! )
3-2. 로그인 기능 없는 익명 게시판이기 때문에 작성자가 수정할 수 있도록 비밀번호도 설정해준다.
3-3. 암호화 기능도 나중에 넣을 것이기 때문에 컬럼도 별도로 만들어준다.
3-4. Sequence는 게시글 번호를 위한 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
-- 게시판 테이블
CREATE TABLE BOARD (
BNO NUMBER,
BWRITTER VARCHAR2(20) NOT NULL,
BPASSWORD VARCHAR2(4) NOT NULL, -- 원래 비밀번호
BPASSWORDENC VARCHAR2(200) NOT NULL, -- 암호화된 비밀번호
BSUBJECT VARCHAR2(50) NOT NULL,
BCONTENT CLOB NOT NULL, -- SUMMERNOTE를 사용하기 때문에 CLOB으로 설정한다.
BREGDATE DATE NOT NULL,
BMODDATE DATE NOT NULL,
BCOUNT NUMBER DEFAULT 0, -- 조회수는 DEFALUT 0으로 설정
CONSTRAINT PK_BOARD PRIMARY KEY (BNO) -- 게시글번호에 PRIMARY KEY(기본키)
);
-- 테이블 삭제는 DELETE가 아닌 DROP이다**
DROP TABLE BOARD;
-- 게시판 테이블 COMMENT
COMMENT ON COLUMN BOARD.BNO IS '게시글번호';
COMMENT ON COLUMN BOARD.BWRITTER IS '작성자';
COMMENT ON COLUMN BOARD.BPASSWORD IS '비밀번호';
COMMENT ON COLUMN BOARD.BPASSWORDENC IS '암호화된 비밀번호';
COMMENT ON COLUMN BOARD.BSUBJECT IS '제목';
COMMENT ON COLUMN BOARD.BCONTENT IS '내용';
COMMENT ON COLUMN BOARD.BREGDATE IS '등록일';
COMMENT ON COLUMN BOARD.BMODDATE IS '수정일';
COMMENT ON COLUMN BOARD.BCOUNT IS '조회수';
-- 게시판 테이블 SEQUENCE
CREATE SEQUENCE BOARD_SEQUENCE
START WITH 1 -- 1부터 시작
INCREMENT BY 1 -- 1씩 증가
MAXVALUE 10000 -- 10000까지
NOCYCLE; -- 값 순환 X
|
cs |
4. root-context.xml bean 등록
BasicDataSource,
SqlSessionFactoryBean,
SqlSessionTemplate
bean을 등록해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="TUTORIAL"/>
<property name="password" value="TUTORIAL"/>
<property name="defaultAutoCommit" value="false"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="dataSource" ref="dataSource"/> <!-- ref : 해당 bean을 참조 -->
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSession"/> <!-- ref : 해당 bean을 참조 -->
</bean>
|
cs |
5. VO 생성
5-1. MVC 패턴의 패키지로 ~board.model.vo 형식의 패키지를 만들어준 후, 객체 생성.
5-2. 캡슐화를 위해 private으로 필드변수를 선언.
5-3. 시/분/초 를 표기 하기 위하여 utilDate를 import해준다.
6. Alt + Shift + S로 생성자, toString 및 Getter & Setter 생성
6-1. 기본생성자 : [ Generate Constructor using Fields... ]
6-2. 필드변수 생성자 : [ Generate Constructors from Superclass... ]
6-3. Getter & Setter : [ Generate Getters and Setters... ]
6-4. toString : [ Generate toString()... ]
7. 완성된 VO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
package com.bootstrap.tutorial.board.model.vo;
import java.util.Date; // 시,분,초 를 표시할 수 있게 java.sql.Date가 아닌 util.Date를 import 한다.
public class Board {
private int bNo; // 게시글 번호
private String bWritter; // 작성자
private String bPassword; // 비밀번호
private String bPasswordEnc; // 비밀번호 (암호화)
private String bSubject; // 제목
private String bContent; // 내용
private Date bRegDate; // 등록일
private Date bModDate; // 수정일
private int bCount; // 조회수
public Board() {
super();
}
public Board(int bNo, String bWritter, String bPassword, String bPasswordEnc, String bSubject, String bContent,
Date bRegDate, Date bModDate, int bCount) {
super();
this.bNo = bNo;
this.bWritter = bWritter;
this.bPassword = bPassword;
this.bPasswordEnc = bPasswordEnc;
this.bSubject = bSubject;
this.bContent = bContent;
this.bRegDate = bRegDate;
this.bModDate = bModDate;
this.bCount = bCount;
}
public int getbNo() {
return bNo;
}
public void setbNo(int bNo) {
this.bNo = bNo;
}
public String getbWritter() {
return bWritter;
}
public void setbWritter(String bWritter) {
this.bWritter = bWritter;
}
public String getbPassword() {
return bPassword;
}
public void setbPassword(String bPassword) {
this.bPassword = bPassword;
}
public String getbPasswordEnc() {
return bPasswordEnc;
}
public void setbPasswordEnc(String bPasswordEnc) {
this.bPasswordEnc = bPasswordEnc;
}
public String getbSubject() {
return bSubject;
}
public void setbSubject(String bSubject) {
this.bSubject = bSubject;
}
public String getbContent() {
return bContent;
}
public void setbContent(String bContent) {
this.bContent = bContent;
}
public Date getbRegDate() {
return bRegDate;
}
public void setbRegDate(Date bRegDate) {
this.bRegDate = bRegDate;
}
public Date getbModDate() {
return bModDate;
}
public void setbModDate(Date bModDate) {
this.bModDate = bModDate;
}
public int getbCount() {
return bCount;
}
public void setbCount(int bCount) {
this.bCount = bCount;
}
@Override
public String toString() {
return "Board [bNo=" + bNo + ", bWritter=" + bWritter + ", bPassword=" + bPassword + ", bPasswordEnc="
+ bPasswordEnc + ", bSubject=" + bSubject + ", bContent=" + bContent + ", bRegDate=" + bRegDate
+ ", bModDate=" + bModDate + ", bCount=" + bCount + "]";
}
}
|
cs |