What to do?
예제 데이터 추가
1. Jpa Auditing 기능 추가하기
2. Docker파일 수정
Jpa Auditing
- 생성일/수정일/삭제일 필드
- 엔티티 삭제시 실제 데이터베이스에서 레코드를 삭제하지 않고, removed_at 컬럼에 삭제일자만 기록
- @Where(clause = "removed_at is NULL")
- 엔티티 조회 시에는 removed_at 필드가 NULL인 경우만 조회
- 작성자, 수정자 필드는 인증 기능 후 구현
@Getter
@ToString
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Where(clause = "removed_at is NULL")
public abstract class AuditingFields {
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) @CreatedDate
private LocalDateTime createdAt;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) @LastModifiedDate
private LocalDateTime modifiedAt;
private LocalDateTime removedAt;
// TODO : 인증기능 구현 및 Jpa 설정 변경 후 주석제거
// @CreatedBy @Column(updatable = false)
// private String createdBy;
// @LastModifiedBy
// private String modifiedBy;
}
Store Entity
- AuditingField를 상속
- @SQLDelete(sql = "UPDATE store SET removed_at = NOW() WHERE id=?")
- Entity 삭제 시 레코드를 삭제하지 않고, removed_at 컬럼에 삭제시간만 기록
@Entity(name="store")
@Getter
@Setter
@SQLDelete(sql = "UPDATE store SET removed_at = NOW() WHERE id=?")
public class StoreEntity extends AuditingFields {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
private String name;
@Column(nullable = false) private String address;
@Column(nullable = false) private Double latitude;
@Column(nullable = false) private Double longitude;
private StoreEntity(String name, String address, Double latitude, Double longitude) {
this.name = name;
this.address = address;
this.latitude = latitude;
this.longitude = longitude;
}
protected StoreEntity(){}
public static StoreEntity of(String name, String address, Double latitude, Double longitude){
return new StoreEntity(name, address, latitude, longitude);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
StoreEntity that = (StoreEntity) o;
return id.equals(that.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
Main Class
- @EnableJpaAudting 데코레이션을 달아주어야 jpa auditing 기능이 동작함
@SpringBootApplication
@EnableJpaAuditing
@ConfigurationPropertiesScan
public class CompassApplication {
public static void main(String[] args) {
SpringApplication.run(CompassApplication.class, args);
}
}
sql 파일
- /database/init/data.sql 경로에 작성
- Docker 컨테이너가 처음 실행될 때 store 테이블을 생성하고, 데이터를 넣는 쿼리 파일 작성
CREATE TABLE store (
id BIGINT AUTO_INCREMENT NOT NULL,
created_at datetime NULL,
modified_at datetime NULL,
removed_at datetime NULL,
name VARCHAR(255) NULL,
address VARCHAR(255) NOT NULL,
latitude DOUBLE NOT NULL,
longitude DOUBLE NOT NULL,
CONSTRAINT pk_store PRIMARY KEY (id)
);
INSERT INTO store (latitude, longitude, address, name) values (37.60894036,127.029052,'서울특별시 성북구 동소문로47길 12','호수온누리약국');
INSERT INTO store (latitude, longitude, address, name) values (37.61040424,127.0569046,'서울특별시 성북구 화랑로 248','돌곶이온누리약국');
INSERT INTO store (latitude, longitude, address, name) values (37.60101417,127.0331664,'서울특별시 성북구 종암로 123 홀리데이약국','홀리데이약국');
INSERT INTO store (latitude, longitude, address, name) values (37.59373053,127.0159792,'서울특별시 성북구 아리랑로 9','하얀약국');
INSERT INTO store (latitude, longitude, address, name) values (37.60475389,127.0230392,'서울특별시 성북구 길음로 20','콩약국');
INSERT INTO store (latitude, longitude, address, name) values (37.58650918,127.0294735,'서울특별시 성북구 개운사길 2','소원약국');
(중략)
Docker Compose
- 이전 포스팅에서 작성한 docker-compose-dev.yaml 파일에서 volumes 부분에 한줄 추가
- - ./database/init:/docker-entrypoint-initdb.d
- 로컬에 ./database/init 경로에 있는 sql 파일들을
- docker container의 docker-entrypoint-initdb.d 와 연결
Test
- docker-compose-dev.yaml 라는 경로에 있는 docer-compose 파일을 실행
docker-compose -f docker-compose-dev.yaml up
- 3306번포트나 6379번 포트가 이미 사용중인 경우 에러가 발생할 수 있음
- MariaDB는 3306, Redis는 6379 포트 사용
- cmd에서 사용 netstat -ano | findstr :3306 를 입력해서 해당 포트를 사용중인 프로그램의 PID를 찾음
- 작업관리자에서 해당 PID에 해당하는 프로그램을 종료시킴
- docker desktop을 열어서 Maria DB 컨터이너에 접속
- Terminal에서 명령어 입력
- mysql -uroot -p
- select 쿼리를 날리면 데이터 베이스에 데이터들을 확인할 수 있음
'Java > Spring' 카테고리의 다른 글
[Spring] 간단한 SNS 만들기 #2 (0) | 2022.12.22 |
---|---|
[Spring] 간단한 SNS 만들기 #1 (0) | 2022.12.22 |
[Spring] 길찾기 서비스 #5 (0) | 2022.12.11 |
[Spring] 게시판 만들기 #12 (0) | 2022.11.26 |
[Spring] 게시판 만들기 #11 (0) | 2022.11.24 |