본문 바로가기

공부 기록/Database

Spring Data MongoDB 적용해보기

https://spring.io/projects/spring-data-mongodb

 

Spring Data MongoDB

Spring Data for MongoDB is part of the umbrella Spring Data project which aims to provide a familiar and consistent Spring-based programming model for new datastores while retaining store-specific features and capabilities. Introduction The Spring Data Mon

spring.io

https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/

 

Spring Data MongoDB - Reference Documentation

abs, acos, acosh, add (* via plus), asin, asin, atan, atan2, atanh, ceil, cos, cosh, derivative, divide, exp, floor, integral, ln, log, log10, mod, multiply, pow, round, sqrt, subtract (* via minus), sin, sinh, tan, tanh, trunc

docs.spring.io


build.gradle

dependencies {
    
    ...
    
	implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
	testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo'
    
}

 

application.yml

spring:
  data:
    mongodb:
      database: 데이터베이스_이름
      uri: 데이터베이스_URI

데이터베이스 이름과 URI를 작성해주면 된다. 내 경우에는 MongoDb atlas에서 클라우드 DB를 생성하여 적용시켰다.

 

MongoConfig

@Configuration
public class MongoConfig extends AbstractMongoClientConfiguration {

    @Value("${spring.data.mongodb.database}")
    private String databaseName;

    @Value("${spring.data.mongodb.uri}")
    private String mongoUri;

    @Override
    protected String getDatabaseName() {
        return databaseName;
    }

    @Bean
    public MongoClient mongoClient() {
        ConnectionString connectionString = new ConnectionString(mongoUri);
        MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
                .applyConnectionString(connectionString)
                .build();
        return MongoClients.create(mongoClientSettings);
    }

    @Bean
    public MongoTemplate mongoTemplate() {
        return new MongoTemplate(new SimpleMongoClientDatabaseFactory(mongoClient(), getDatabaseName()));
    }
}

 

Repository

@Repository
public interface Repository extends MongoRepository<Class, String>, CustomRepository {
}

Class에는 Repository를 이용할 엔티티 클래스를 넣어주면 된다.

또한 MongoDB 특성상 Id 값은 String으로 설정해준다.

save, delete와 같은 기본 기능을 사용하는 것으로 충분하다면 위와 같이 Repository만 만들어두어도 좋을 것이고, 더 많은 기능이 필요하다면 CustomRepository 인터페이스와 CustomRepositoryImpl을 생성하여 구현한다.

 

Test

@SpringBootTest
@AutoConfigureTestDatabase
public class RepositoryTest {

    @Autowired
    private Repository repository;
    @Autowired
    private MongoTemplate mongoTemplate;

    @AfterEach
    void refresh() {
        repository.deleteAll();
    }

    @Test
    void save() {
        
        ...
        
    }

MariaDB를 같이 사용하는 프로젝트라 그런지 @SpringBootTest 어노테이션을 붙여줘야 테스트가 정상 작동했다.

'공부 기록 > Database' 카테고리의 다른 글

Three-tier architecture  (0) 2023.07.30
Stored Function  (0) 2023.07.26
MongoDB CRUD  (0) 2023.06.24
MQL, Query Filter, Operator  (0) 2023.06.24
MongoDB 설치하기  (0) 2023.06.23