Search

Suggested keywords:
  • Java
  • Docker
  • Git
  • React
  • NextJs
  • Spring boot
  • Laravel

Integrate MongoDB with Spring Boot

  • Share this:

post-title

MongoDB database is a popular NoSQL database known for its scalability and flexibility. In contrast, Spring Boot is a powerful framework that simplifies the development of Java applications. Our goal in this article is to demonstrate how to integrate MongoDB with Spring Boot application, including setting up dependencies, configuring the connection, and performing basic CRUD operations (Create, Read, Update, Delete).

Create a Spring Boot Project

Create a new Spring Boot project. This can be done using Spring Initializr (https://start.spring.io/) or your favorite IDE.

 

Add MongoDB Dependencies

In your pom.xml file (for Maven), add the MongoDB dependencies:

<dependencies>
    <!-- Spring Boot Starter Data MongoDB -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>

 

Configure MongoDB Connection

Spring Boot provides auto-configuration for MongoDB based on the properties in the application.properties file. Add your MongoDB connection properties to this file:

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydatabase

 

Create a Model Class

Create a simple model class representing a MongoDB document. For example, let's create a User class:

package com.mongodb.application.entity;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "users")
public class User {

    @Id
    private String id;
    private String firstName;
    private String lastName;
    private int age;

    // Constructors
    public User() {
    }

    public User(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    // Getters and Setters
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = 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;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // toString() method
    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", age=" + age +
                '}';
    }
}

 

Create Repository

Create a repository interface that extends MongoRepository to perform CRUD operations on the User collection.

package com.mongodb.application.repository;

import org.springframework.data.mongodb.repository.MongoRepository;
import com.mongodb.application.entity.User;

public interface UserRepository extends MongoRepository<User, String> {

}

 

Perform CRUD Operations

Now, you can use the UserRepository to perform CRUD operations in your service or controller classes.

 

package com.mongodb.application.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
import com.mongodb.application.entity.User;
import com.mongodb.application.repository.UserRepository;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User createUser(User user) {
        return userRepository.save(user);
    }

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User getUserById(String id) {
        Optional<User> optionalUser = userRepository.findById(id);
        return optionalUser.orElse(null);
    }

    public User updateUser(User updatedUser) {
        return userRepository.save(updatedUser);
    }

    public void deleteUser(String id) {
        userRepository.deleteById(id);
    }
}

 

Create CommandLineRunner Bean to Test

This bean will call the methods in your UserService to test the controller endpoints.

package com.mongodb.application.testRunner;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import com.mongodb.application.entity.User;
import com.mongodb.application.service.UserService;

@Component
public class TestRunner implements CommandLineRunner {

    @Autowired
    private UserService userService;

    @Override
    public void run(String... args) throws Exception {
        // Your test code here
        testUserEndpoints();
    }

    private void testUserEndpoints() {
        // Test creating a user
        User newUser = new User();
        newUser.setFirstName("John");
        newUser.setLastName("Doe");
        newUser.setAge(30);

        System.out.println("Creating User:");
        User createdUser = userService.createUser(newUser);
        System.out.println("Created User: " + createdUser);

        // Test reading users
        System.out.println("Reading All Users:");
        userService.getAllUsers().forEach(System.out::println);

        // Test updating a user
        System.out.println("Updating User:");
        createdUser.setAge(31);
        User updatedUser = userService.updateUser(createdUser);
        System.out.println("Updated User: " + updatedUser);

        // Test reading a specific user
        System.out.println("Reading User by ID:");
        User fetchedUser = userService.getUserById(updatedUser.getId());
        System.out.println("Fetched User: " + fetchedUser);

        // Test deleting a user
        System.out.println("Deleting User:");
        userService.deleteUser(fetchedUser.getId());
        System.out.println("User deleted.");

        // Test reading all users after deletion
        System.out.println("Reading All Users after Deletion:");
        userService.getAllUsers().forEach(System.out::println);
    }
}


 

Run the Application

When you run your Spring Boot application, the CommandLineRunner will automatically execute the testUserEndpoints() method. A user can be created, read, updated, and deleted using this CommandLineRunner. You can check the data getting added to the database by commenting out the deletion check

Make sure to have MongoDB running and properly configured with Spring Boot for this to work. Each operation's output will be displayed in the console.

This setup allows you to test your controller's endpoints without needing an external tool like Postman.

 

Conclusion

In this article, we've explored how to connect MongoDB with a Spring Boot application. By adding the necessary dependencies, configuring the MongoDB connection properties, creating a model class, and using a MongoRepository, we can easily perform CRUD operations on MongoDB documents. Spring Boot's auto-configuration simplifies the process of setting up the MongoDB connection, allowing developers to focus on building the application's logic rather than handling the database setup. With this setup, Spring Boot applications can be built with ease using MongoDB

Muthu Annamalai

About author
Technical Writer | Pre-Final Year Student | Code & Community | Developer who works everyday to improve himself.