반응형
이전포스팅에서 database를 사용하지 않는 법을 다뤘다.
자세한 내용은 아래 참고 포스팅 참고 바란다.
이번 포스팅에서는 csv파일을 dbms 읽어오듯 설정하는 법을 다룰 것이다.
java
코드 복사
import com.opencsv.CSVReader;
import cohttp://m.opencsv.bean.CsvToBeanBuilder;
import java.io.FileReader;
import java.util.List;
public class CsvFileReader {
public List<MyEntity> readCsv(String filePath) throws Exception {
try (CSVReader reader = new CSVReader(new FileReader(filePath))) {
return new CsvToBeanBuilder<MyEntity>(reader)
.withType(MyEntity.class)
.build()
.parse();
}
}
}
여기서 MyEntity는 CSV 파일의 각 행(row)을 매핑하는 엔티티 클래스
2. JPA Repository 인터페이스 모방
JPA Repository와 유사한 인터페이스를 만들어서 CSV 파일에서 데이터를 가져오도록 구현할 수 있다.
java
코드 복사
import java.util.List;
import java.util.Optional;
public interface MyEntityRepository {
List<MyEntity> findAll();
Optional<MyEntity> findById(Long id);
MyEntity save(MyEntity entity);
void deleteById(Long id);
}
3. CSV 기반 Repository 구현
MyEntityRepository를 구현하여 CSV 파일을 백엔드로 사용하는 클래스를 작성
java
코드 복사
import java.util.List;
import java.util.Optional;
public class CsvMyEntityRepository implements MyEntityRepository {
private final List<MyEntity> entities;
public CsvMyEntityRepository(String csvFilePath) throws Exception {
CsvFileReader csvFileReader = new CsvFileReader();
this.entities = csvFileReader.readCsv(csvFilePath);
}
@Override
public List<MyEntity> findAll() {
return entities;
}
@Override
public Optional<MyEntity> findById(Long id) {
return entities.stream()
.filter(entity -> entity.getId().equals(id))
.findFirst();
}
@Override
public MyEntity save(MyEntity entity) {
entities.add(entity);
return entity;
}
@Override
public void deleteById(Long id) {
entities.removeIf(entity -> entity.getId().equals(id));
}
}
4. 서비스(Service)에서 사용하기
이제 이 CSV 기반 레포지토리를 서비스 레이어에서 사용할 수 있습니다.
java
코드 복사
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MyEntityService {
private final MyEntityRepository myEntityRepository;
public MyEntityService(MyEntityRepository myEntityRepository) {
this.myEntityRepository = myEntityRepository;
}
public List<MyEntity> getAllEntities() {
return myEntityRepository.findAll();
}
public MyEntity getEntityById(Long id) {
return myEntityRepository.findById(id).orElse(null);
}
// 기타 비즈니스 로직...
}
4. 서비스(Service)에서 사용하기
이제 이 CSV 기반 레포지토리를 서비스 레이어에서 사용할 수 있습니다.
java
코드 복사
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MyEntityService {
private final MyEntityRepository myEntityRepository;
public MyEntityService(MyEntityRepository myEntityRepository) {
this.myEntityRepository = myEntityRepository;
}
public List<MyEntity> getAllEntities() {
return myEntityRepository.findAll();
}
public MyEntity getEntityById(Long id) {
return myEntityRepository.findById(id).orElse(null);
}
// 기타 비즈니스 로직...
}
참고 포스팅
https://thenicesj.tistory.com/1020
반응형
'IT > Java' 카테고리의 다른 글
모던 자바(Modern JAVA) 란? (19) | 2024.09.02 |
---|---|
@Order 어노테이션 (10) | 2024.08.24 |
@Valid 를 Dto 에 적용하기 (7) | 2024.08.18 |
[Error] An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments (17) | 2024.08.17 |
ConcurrentHashMap 을 활용한 동시성 제어 (10) | 2024.08.16 |
댓글