JDBC까지 추가하였으므로, 이제는 객체와 인터페이스를 구현하기로 한다.
1. 객체 생성
프로젝트의 src/main/java 속성아래에
com.myboard.vo로 패키지를 생성후, MyBoardVo 클래스를 생성한다.
이후, 만들고자 하는 테이블의 객체들을 설정해준다.
이때, 각각의 객체들은 private로 설정한다.
접근 제어자(Private)를 사용하는 이유
이렇게 접근 제어자를 사용하는 이유는 보안 때문이라고 할 수 있다. 만약에 웹사이트에서 아이디와 비밀번호 같은 중요한 정보를 public 변수에 저장을 한다면 아무데서나 직접적으로 접근하여 그 값을 변경할 수 있기 때문에 노출되기 쉬워지게 된다. 이런 중요한 변수들은 대부분 private를 붙여준다.
나는 롤(LoL)에 대한 정보를 저장하는 테이블을 만들기로 하여 아래와 같이 만들었다.
package com.myboard.vo;
public class MyBoardVo {
private String id; //사용자 아이디
private char w_l; // 승, 패
private String champion; // 챔피언
private String kda; // KDA 킬/데스/어시
private int kill_invol; //킬 관여 비율
이후, private에 접근하기 위해 getter/setter를 사용한다.
마우스 우클릭 -> source -> Generate Getter Setter 클릭 -> Select All 체크 후 생성
여기에 단위테스트를 해보기 위해 @Override를 통해 아래와 같이 선언한다.
@Override
public String toString() {
return String.format("[id=%s, w_l=%c, champion=%s, kda=%s, kill=invol=%d]",
id,w_l,champion,kda,kill_invol);
}
완성된 MyBoardVo 클래스
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
|
package com.myboard.vo;
public class MyBoardVo {
private String id; //사용자 아이디
private char w_l; // 승, 패
private String champion; // 챔피언
private String kda; // KDA 킬/데스/어시
private int kill_invol; //킬 관여 비율
@Override
public String toString() {
return String.format("[id=%s, w_l=%c, champion=%s, kda=%s, kill=invol=%d]",
id,w_l,champion,kda,kill_invol);
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public char getW_l() {
return w_l;
}
public void setW_l(char w_l) {
this.w_l = w_l;
}
public String getChampion() {
return champion;
}
public void setChampion(String champion) {
this.champion = champion;
}
public String getKda() {
return kda;
}
public void setKda(String kda) {
this.kda = kda;
}
public int getKill_invol() {
return kill_invol;
}
public void setKill_invol(int kill_invol) {
this.kill_invol = kill_invol;
}
}
|
2. 인터페이스 구현
프로젝트의 src/main/java 속성아래에
com.myboard.mapper로 패키지를 만든 후, MyBoardMapper 인터페이스를 만든다.
이후, 아래와 같이 @(어노테이션)을 사용해 SQL문의 SELECT로 검색해보기로 한다.
package com.myboard.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.myboard.vo.MyBoardVo;
public interface MyBoardMapper {
@Select("SELECT * FROM MYBOARD")
public List<MyBoardVo> getList();
}
3. DB에 테이블 생성
단위테스트를 수행하기 전에, MYBOARD라는 이름의 테이블을 생성하기로 한다.
Oracle SQL sqldeveloper을 열어 사용자 이름 : scott, 비밀번호 : TIGER로 만든 후 접속한다.
(root-context.xml에서 username="scott', password="TIGER"로 설정)
만들고자 하는 롤 캐릭터 테이블을 sql문으로
CREATE TABLE MYBOARD(
ID VARCHAR(20) PRIMARY KEY,
W_L VARCHAR(5),
CHAMPION VARCHAR2(20) NOT NULL,
KDA VARCHAR2(20) CHECK(KDA LIKE '%/%/%'),
KILL_INVOL NUMBER(10)
);
위와 같이 테이블을 생성해준다.
INSERT INTO MYBOARD VALUES ('목에데낄라','승','모르가나','1/1/5',63);
INSERT INTO MYBOARD VALUES ('DRX Deft','승','이즈리얼','3/1/6',43);
INSERT INTO MYBOARD VALUES ('탑에갱가요','패','엘리스','3/6/6',27);
INSERT INTO MYBOARD VALUES ('욕하면던짐','패','드레이븐','0/7/3',23);
INSERT INTO MYBOARD VALUES ('HIDE ON BUSH','승','에코','10/3/5',77);
데이터도 위와 같이 넣어준다.
데이터가 잘 들어갔는지 확인하기 위해서,
SELECT * FROM MYBOARD; 로 검색해보면
위와 같이 잘 들어간 것을 확인할 수 있다.
이제 데이터가 적용이 되도록
COMMIT; 명령어를 친 후 사용하도록 하자.
4. 단위테스트 수행하기
DB의 데이터를 잘 들어오는지 확인하기 위해 먼저 테스트를 수행하기로 한다.
src/test/java에 com.myboard.mapper라는 패키지를 생성 후, MyBoardTest 클래스를 만든다.
* 폴더를 분류해놓는 이유?
-같은 패키지명에 같은 폴더에 테스트 코드를 작성해도 상관없다.
-하지만, 그렇게 작성할 시 테스트 코드와 서비스 코드가 뒤섞이기 때문에
프로젝트 폴더가 지저분해지게 된다. (그래서 Maven이 이 프로젝트를 나눠서 보관하는 역할)
스프링 테스트 진행
(1) pom.xml에서 spring-test 라이브러리 추가 (01페이지에서 이미 정의를 해둔 상태)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
<scope>test</scope>
</dependency>
(2) root-context에서 bean에 등록
root-context.xml으로 이동하여, Namespaces 탭에서 mybatis-spring 체크
(3) 테스트 하려는 클래스에 RunWith(), ContextConfiguration() 설정
@RunWith - > 테스트코드가 스프링을 실행하는 역할을 할 것
@ContextConfiguration 지정된 클래스 또는 문자열을 이용해 객체를 스프링 내의 객체로 등록(빈 등록)
즉, RunWith,ContextConfiguration을 통해 경로를 설정
@Autowired는 주입하려고 하는 객체의 타입이 일치하는지를 찾고 객체를 자동으로 주입한다.
이후, @Test를 통해 mapper인터페이스에 등록한 getList의 메서드를 호출해준다.
package com.myboard.mapper;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.myboard.vo.MyBoardVo;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
public class MyBoardTest {
private Logger log=Logger.getLogger(MyBoardTest.class);
@Autowired
private MyBoardMapper mapper;
@Test
public void testGetList() {
for(MyBoardVo board:mapper.getList()) {
log.info(board);
}
}
}
여기까지 완료 후, Run as->JUnit Test
다음과 같이 자바에서도 DB의 생성정보가 뜨는 것을 확인할 수 있다.
'언어 > Spring' 카테고리의 다른 글
스프링[Spring] 게시판 만들기_05 (0) | 2020.07.15 |
---|---|
스프링[Spring] 게시판 만들기_04 (1) | 2020.07.08 |
스프링[Spring] 게시판 만들기_03 (0) | 2020.07.07 |
스프링[Spring] 게시판 만들기_01 (0) | 2020.06.24 |
스프링[Spring] 설치하기 (0) | 2020.06.15 |