https://spring.io/projects/spring-data-mongodb
https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/
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 |