Link
Today
Total
10-17 07:26
Archives
관리 메뉴

초보개발자 긍.응.성

MongoTemplate를 이용한 MongoDB와 Spring boot 연동 본문

MongoDB

MongoTemplate를 이용한 MongoDB와 Spring boot 연동

긍.응.성 2020. 10. 25. 21:52
반응형

SpringBoot와 MongoDB를 연결하고 MongoRepository를 사용해보자.

의존성 주입

pom.xml에 spring-boot-starter-data-mongodb를 추가합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

MongoDB 접속 정보 세팅

application.yml에 mongodb connection을 위한 설정 값들을 세팅해줍니다. mongoDB의 기본 Connection String Formatmongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]] 입니다. 로컬 MongoDB 서버로 테스트하고 있기 때문에 아래와 같이 connectionString을 설정해줍니다.

# mongodb
mongodb:
  test:
    connectionString: mongodb://localhost:27017/test

MongoDB와 연결을 위한 connectionString을 지정했으니 이를 통해 mongoDatabaseFactorymongoTemplate 빈을 생성해줍니다.

@Configuration
public class MongoDBConfig {

	@Value("${mongodb.test.connectionString}")
	private String connectionString;

	@Bean
	public MongoDatabaseFactory mongoDatabaseFactory() {
		return new SimpleMongoClientDatabaseFactory(connectionString);
	}

	@Bean
	public MongoTemplate mongoTemplate() {
		return new MongoTemplate(mongoDatabaseFactory());
	}
}

 

Model 객체 생성

유저의 성(firstName)과 이름(lastName)을 갖는 Customer 도큐먼트를 정의합시다. DB에 저장될 document의 이름은 @Documemt 애노테이션을 통하여 지정해줍니다. MongoDB의 모든 도큐먼트는 반드시 _id 라는 주키를 갖게 됩니다. @Id 애노테이션은 해당 필드에 대해 주키로 지정하겠다는 의미를 가집니다.

static final 문자열들은 document에 대한 쿼리에서 필드 이름을 사용하기 위해 선언하였습니다.

@Document(collection = "customer")
public class Customer {
   public static final String ID = "id";
   public static final String FIRST_NAME = "firstName";
   public static final String LAST_NAME = "lastName";
    
   @Id
   private String id;

   private String firstName;
   private String lastName;

   public Customer(String firstName, String lastName) {
      this.firstName = firstName;
      this.lastName = lastName;
   }

   public String getId() {
      return id;
   }

   public String getFirstName() {
      return firstName;
   }

   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }

   public String getLastName() {
      return lastName;
   }

   public void setLastName(String lastName) {
      this.lastName = lastName;
   }

   @Override
   public String toString() {
      return "Customer{" +
         "firstName='" + firstName + '\'' +
         ", lastName='" + lastName + '\'' +
         '}';
   }
}

Run

mongoTemplate 기능을 확인해 보겠습니다. MongoTemplate 빈을 @Autowired를 통해 주입받습니다.

@SpringBootApplication
public class Application implements CommandLineRunner {

	@Autowired
	private MongoTemplate mongoTemplate;

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

	@Override
	public void run(String... args) throws Exception {
		Customer customer1 = new Customer("son", "changwoo");
		Customer customer2 = new Customer("son", "jeehoon");

		// insert
		mongoTemplate.insertAll(Arrays.asList(customer1, customer2), Customer.class);

		// get
		List<Customer> result = mongoTemplate.find(
        		Query.query(Criteria.where(Customer.FIRST_NAME).is("son")),
                Customer.class);
                
		System.out.println(result);
	}
}

Spring Data의 Repository를 상속하여 구현하지는 않았기에 메서드에 대한 findBy** 패턴의 여러 메서드들은 지원되지 않습니다. 하지만 Query와 Criteria를 조합하여 다양한 쿼리를 직접 만들어 실행할 수 있습니다. 

console
compass

 

 

반응형
Comments