본문 바로가기
IT/Java

CSV 파일읽어서 Repository 설정 방법

by 성준하이 2024. 8. 21.
반응형

이전포스팅에서 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

 

DatasSource Exclude 설정 관련(DataSourceAutoConfiguration)

SpringBoot프로젝트 run을 하기 위해서는 main 메서드가 존재하는데 해당 메서드에서는 @SpringBootApplication 이라는 어노테이션이 달려있다. 여기 어노테이션에 이렇게 설정을 해주면 해당 프로젝트에

thenicesj.tistory.com

 

반응형

댓글