AOP와 트랜잭션 처리 실습 (데이터베이스로 테스트)
Back-End/Spring 2019. 6. 24. 23:17AOP 실습예제
사용자가 메시지를 남기면 포인트 10 증가
메시지를 읽으면 포인트 5 증가
com.examplt.spring02.aop ㄴMessageAdvice.java com.example.spring02.controller.message ㄴMessageController.java com.example.spring02.model.message.dto ㄴUserDTO.java ㄴMessageDTO.java com.example.spring02.model.message.dao ㄴMessageDAO.java ㄴMessageDAOImpl.java ㄴPointDAO.java ㄴPointDAOImpl.java com.example.spring02.service.message ㄴMessageService.java ㄴMessageServiceImpl.java |
-AOP 실습용 테이블을 생성-
(데이터베이스를 이용한 실습)
AOP와 트랜잭션 처리를 활용한 실습
글쓰기를 하면 포인트 10을 부여
글읽기를 하면 열람시간을 수정하고 포인트 5를 부여
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 115 116 117 118 119 120 121 122 123 124 125 126 127 | drop table tbl_user cascade constraints //혹시 중복된 테이블이 있을수도 있기 때문에 테이블 삭제 create table tbl_user ( //tbl_user 테이블을 생성 userid varchar2(50) not null, //id upw varchar2(50) not null, //비밀번호 uname varchar2(100) not null, //이름 upoint number default 0, //포인트, 기본값은 0으로 한다 primary key(userid) //기본키는 id로 한다. ); create table tbl_message( //tbl_message (메시지를 저장) 테이블을 생성 mid number not null, //메시지의 id targerid varchar2(50) not null, //메시지를 받을 사람의 id sender varchar2(50) not null, //메시지를 보낸 사람의 id message varchar2(4000) not null,//메시지의 내용 opendate date, //메시지를 열어본 시간 senddate date default sysdate, //메시지를 보낸 시간 (보낼 당시 현재 시간) primary key(mid) //기본키를 메시지의 id로 설정 ); --시퀀스 생성-- create sequence message_seq //message_seq 시퀀스를 생성 (메시지가 하나 생길때마다 숫자가 1씩증가, 초기값은 1로 설정) start with 1, increment by 1; --제약 조건 설정-- alter table tbl_message add constraint fk_usertarger //tbl_message테이블에 제약조건을 설정 foreign key (targetid) references tbl_user(userid); //무결성이 깨질수 있기 때문에 targetid값에 userid값만 들어갈 수 있도록 설정 (아무id나 들어가면 안되기 때문에) alter table tbl_message add constraint fk_usersender //tbl_message테이블에 제약조건을 설정 foreign key (sender) references tbl_user(userid); //위쪽과 마찬가지로 sender값에 userid값만 들어갈 수 있도록 설정함 --사용자 추가-- insert into tbl_user (userid, upw, uname) values ('user00','user00','kim'); insert into tbl_user (userid, upw, uname) values ('user01','user01','park'); insert into tbl_user (userid, upw, uname) values ('user02','user02','hong'); insert into tbl_user(userid, upw, uname) values ('user03','user03','choi'); insert into tbl_user(userid, upw, uname) values ('user04','user04','lee'); select * from tbl_user; --user02가 user00에게 메시지를 전송 insert into tbl_message (mid, targetid, sender, message) values (message_seq.nextval, 'user00','user02','안녕...'); --user02에게 포인트 10 추가 update tbl_user set upoint=upoint+10 where userid='user02'; select * from tbl_user; --user00의 메시지박스 조회 select * from tbl_message where targetid='user00'; update tbl_message set opendate=sysdate where mid=2; //메시지를 읽으면 읽은 시간을 현재시간으로 바꾼다. select * from tbl_message; update tbl_user set upoint=upoint+5 where userid='user00'; //userid가 user00과 같으면 포인트를 5포인트 증가시킨다. select * from tbl_user; delete from tbl_message; update tbl_user set upoint=0; //tbl_message테이블이 삭제될때 tbl_user테이블의 포인트를 0으로 한다. --메시지 일련번호를 관리할 시퀀스 객체 create sequence message_seq start with 1 --1부터 시작 increment by 1; --1씩 증가 --시퀀스.nextval => 다음번호 select message_seq.nextval from dual; //이 구문을 실행시키게 되면 마치 은행에서 번호표를 뽑듯이 번호가 1씩 계속 증가가된다. //또한 이미 내가 뽑은 번호의 앞번호로 돌아갈수는 없고, 내가 뽑은 번호가 기억이 된다. ====================포인트를 얻게하는 테스트======================================================================== --테스트를 위한 사용자 계정을 추가한다. insert into tbl_user (userid, upw, uname) values ('user00','user00','kim'); //아이디, 비밀번호, 이름 insert into tbl_user (userid, upw, uname) values ('user01','user01','park'); insert into tbl_user (userid, upw, uname) values ('user02','user02','hong'); insert into tbl_user (userid, upw, uname) values ('user03','user03','choi'); insert into tbl_user (userid, upw, uname) values ('user04','user04','lee'); select * from tbl_user; --메시지 보내기 테스트-- --user02가 user00에게 메시지 전송 insert into tbl_message (mid, targetid, sender, message) values (message_seq.nextval,'user00','user02','안녕'); //해석 : user02가 user00에게 '안녕'이라는 메시지를 보낸다. select * from tbl_message; --user02에게 포인트 10 추가 update tbl_user set upoint=upoint+10 where userid='user02'; select * from tbl_user; --user00이 메시지 목록 select * from tbl_message where targetid='user00'; --메시지를 읽으면 열람시간을 저장 update tbl_message set opendate=sysdate where mid=18; //18번 메시지를 읽으면 읽은 열람시간을 현재시간으로 바꾸기 select * from tbl_message; --메시지를 읽으면 읽은 사람한테 5포인트를 추가 update tbl_user set upoint=upoint+5 where userid='user00'; select * from tbl_user; | cs |
테스트 종료 후 테이블 삭제 및 commit 실시
1 2 3 | delete from tbl_message; //메시지 테이블은 지금 필요 없기 때문에 일단 삭제 commit; //지금까지 한 작업들을 반영하기 위해 commit를 | cs |
'Back-End > Spring' 카테고리의 다른 글
AOP와 트랜잭션 처리 실습 (코드로 테스트) (0) | 2019.06.26 |
---|---|
http 응답 코드와 method의 종류 (0) | 2019.06.26 |
AOP 복습(Spring Framework STS4 동영상 강의) (0) | 2019.06.22 |
Spring를 사용한 Chart 그리기 (JFree Chart) (0) | 2019.06.21 |
Spring를 사용한 Chart 그리기 (Google Chart) (1) | 2019.06.20 |