일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- mysql
- 아이온큐
- redis
- TSLA
- request cache
- API
- java crawler
- Aggregation
- ann
- NORI
- Docker
- JPA
- aqqle
- Cache
- elasticsearch cache
- Elasticsearch
- dbeaver
- api cache
- KNN
- 테슬라
- Selenium
- Analyzer
- 양자컴퓨터
- vavr
- Query
- java
- IONQ
- aggs
- Elastic
- file download
Archives
- Today
- Total
아빠는 개발자
[JPA] CRUD 구현하기 본문
728x90
반응형
각설하고 퀵하게 가보자
우선 디펜던시 (DB, JPA)
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'mysql:mysql-connector-java'
테이블은 이렇게 생겼고
테이블 명은 keywords
그리곤 엔티티
package com.doo.aqqle.domain;
import lombok.*;
import javax.persistence.*;
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Setter
@Entity
@Table(
name = "keywords",
uniqueConstraints = {
@UniqueConstraint(
columnNames = {"keyword", "use_yn"}
)
}
)
public class Keywords {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 200, nullable = false, unique = true)
private String keyword;
@Column(length = 1, nullable = false, name = "use_yn")
private String useYn;
@Builder
public Keywords(
String keyword,
String use
) {
this.keyword = keyword;
this.useYn = use;
}
}
테이블명 이런거 안적어도 규칙에 따르면 엔티티 클레스명과 테이블명을 맞춰줄수 있음
그 다음은 repository
package com.doo.aqqle.domain;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface KeywordsRepository extends JpaRepository<Keywords, Long> {
List<Keywords> findByUseYn(String use);
List<Keywords> findByKeyword(String Keyword);
List<Keywords> findAll();
}
마지막으로 써비스
package com.doo.aqqle.service;
import com.doo.aqqle.annotation.Timer;
import com.doo.aqqle.domain.Keywords;
import com.doo.aqqle.domain.KeywordsRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@Service
@RequiredArgsConstructor
public class KeywordsService {
private final KeywordsRepository keywordsRepository;
private List<Keywords> keywords;
@Timer
@Transactional
public void post(List<String> keywordList) {
keywords = new ArrayList<>();
keywordList.stream().forEach(x -> {
keywords.add(new Keywords(x, "Y"));
});
keywordsRepository.saveAll(keywords);
}
@Timer
@Transactional
public List<Keywords> get() {
return keywordsRepository.findAll();
}
@Timer
@Transactional
public List<Keywords> getKeywordsByUse(String use) {
return keywordsRepository.findByUseYn(use);
}
@Timer
@Transactional
public List<Keywords> getKeywordsByKeyword(String keyword) {
return keywordsRepository.findByKeyword(keyword);
}
@Timer
@Transactional
public boolean put(Long id, String useYn) {
Keywords keywords = keywordsRepository.findById(id).orElse(null);
if (keywords != null) {
keywords.setUseYn(useYn);
if (keywordsRepository.save(keywords) != null){
return true;
} else {
return false;
}
}
return false;
}
}
put 메소드를 보면 우선 ID 로 대상을 검색하고 검색된 대상에 대해서 데이터를 갱신해주고 다시 save 한다.
CrudRepository인터페이스의 findById 메소드는 Optional 이므로 orElse 일때 null 로 처리 하게 해준다.
728x90
반응형
'Java' 카테고리의 다른 글
[java] URL 호출해서 파일 다운로드 (InputStream) (0) | 2024.06.01 |
---|---|
[java] Unix 타임스탬프 (0) | 2024.06.01 |
[java] 이벤트 리스너 @EventListener (0) | 2024.03.31 |
[Selenium] Java Selenium - multi browser (0) | 2023.12.31 |
[java] FileUtils.cleanDirectory (0) | 2023.12.31 |