0. 개발환경
MySQL DB / JAVA 언어 / Spring Boot 프레임 워크 / STS IDE / git 버전관리
0-1. 프로젝트 생성하기 전에 dbeaver 로 데이터베이스 연결 확인하고.
이번 프로젝트에서 쓸 databaes 생성
create database teama;
db 확인하면서 작업하기 위해 sql 편집기를 열어 두고 시작 (Window - Preferences )
0-2. sts 열어서 preferences encoding 설정
1. 새로운 프로젝트 생성
1-1. application.properties 파일에 데이터베이스 접속정보 설정 복붙 후에 프로젝트 우클릭으로 run as Spring Boot App
포트 충돌은 cmd 창에서 해당 포트번호 id 죽여주고 다시 실행
netestat -ano
taskkill /pid 값 /F
1-2. build.gradle 암호화 외부라이브러리 dependencies에 추가한 후 프로젝트 우클릭으로 그래들-리빌드
https://mvnrepository.com/artifact/org.mindrot.bcrypt/bcrypt
implementation group: 'org.mindrot', name: 'jbcrypt', version: '0.4'
1-3. 메인함수 클래스에 db변경 감지 어노테이션 설정
@EnableJpaAuditing
2. Entity 작업
2-1. model/BaseEntity.java
@MappedSuperclass
@EntityListeners(value= {AuditingEntityListener.class}) // Entity변경사항이 생기면 작업 수행
@Getter //롬복 라이브러리에서 속성의 게터 메서드를 만들어라~~
abstract class BaseEntity {
@CreatedDate //생성날짜
@Column(name="regdate", updatable=false) //테이블에 만들어 질 때 컬럼 이름, 수정불가능
private LocalDateTime regDate;
@LastModifiedDate //마지막 수정날짜
@Column(name="moddate")
private LocalDateTime modDate;
}
2-2. 다른 Entity작업 (회원, 상품, 1:N / 댓글, 회원 1:N / 댓글, 상품 N:N )
entity 작업하고 테이블 없으면 자동생성하는 ddl-auto=update (실제 업무는 테이블 직접 생성해야함)
so db 접속해서 테이블 생성 구문 입력
show databases
create database teama
use teama
create table wallet (
walletid varchar(255) primary key,
balance bigint not null
)engine=InnoDB default CHARSET=utf8;
show databases;
create table members(
mnum bigint primary key auto_increment,
walletid varchar(255) not null, --
id varchar(255) not null,
pw varchar(255) not null,
nickname varchar(255) not null,
tel varchar(255) not null,
addr varchar(255) not null,
star float,
regdate datetime(6) not null,
moddate datetime(6) not null,
foreign key (walletid) references wallet(walletid) on delete cascade
)engine=InnoDB default CHARSET=utf8;
create table member_auth (
mnum bigint not null,
auth varchar(255) not null,
foreign key (mnum) references members (mnum) on delete cascade
)engine=InnoDB default CHARSET=utf8;
create table product (
pnum bigint primary key auto_increment auto_increment,
mnum bigint not null,
name varchar(255) not null,
price integer not null,
regdate datetime(6) not null,
moddate datetime(6) not null,
thumb varchar(255),
detail varchar(255),
foreign key (mnum) references members (mnum) on delete cascade
) engine=InnoDB default CHARSET=utf8;
create table product_img_file (
imgnum bigint primary key auto_increment auto_increment,
imgname varchar(255) not null,
imgtype varchar(255) not null,
foreign key (imgnum) references product (pnum) on delete cascade
) engine=InnoDB default CHARSET=utf8;
create table trade(
onum bigint primary key auto_increment , -- PK int type
bmnum varchar(255) not null, -- 회원번호
smnum varchar(255) not null,
odate datetime(6) not null, --
pnum bigint not null,
txid varchar(255) not null,
ototal integer not null,
foreign key (pnum) references product (pnum) on delete cascade
)engine=InnoDB default CHARSET=utf8;
drop table trade;
drop table product_img_file;
drop table product;
drop table member_auth;
drop table members;
drop table wallet;
select * from product;
select * from member_auth;
2-3. 각각의 테이블 위한 entity class생성
2-4. persistence/MemberRepository.java 처럼 인터페이스 생성. Entity에 해당하는 repository를 생성해서 JpaRepository를 extends
기본 제공되는 CRUD 테스트
추가 대문자로 작성하는 메서드
더 필요한건 @Query() 를 통해서 쿼리문을 직접 작성하는데
2-5. MemberRepository.java (인터페이스클래스)에서 대문자로 작성한 메서드는
junit test에서 이용해먹는다.
ex
List<Product> list = getProductByMember(Member member)
* 레파지토리에서 이거 선언해주지 않으면 테스트할 때 에러가 난다.
3. 서비스작업
3-1. 요청받아서 결과를 보여줄 DTO 클래스를 생성
DTO 클래스를 작성할 때는 Entity와 달리 BaseEntity의 필드까지 추가가되고,
1:N로 연결된 Entity 를 통으로 묶어주지 않고 필요한 필드들만 따로 써준다.
3-2. MemberService.java 에서 필요한 메서드 인터페이스(메서드 원형) 선언하고
entity와 dto를 왔다갔다 변환시켜줄 메서드도 만들어주어야 한다.
이때 Entity로 변환하는 메서드에서는 Product.builder()의 속성들은 DTO.java 가 아닌 Entity의 속성들을 채워주면 된다. ✍️
반대로 DTO로 변환하는 메서드는 DTO.java의 필드들을 채워주면 됨.
3-3. productServiceImple.java에서 서비스에서 선언한 원형 메서드를 구현해주면된다.
@Service
@RequiredArgsConstructor
어노테이션도 붙여야한다.
3-4. ServiceTest.java
테스트 수행 (DTO를 통한 db등록까지 되는건지...봄? insert 테스트할 때 더미값은 entity아닌 dto 필드들 채우면 됨 . 자동생성되는거 빼고
댓글