Categories: JavaNoSQL

Spring Data MongoDB Hello World with Spring MVC – Example

The article presents detailed steps on what is needed to get started with Spring Data MongoDB while you are working with Spring MVC web application. The article assumes that you have got Spring MVC application setup done.
Step 1: Create Documents in MongoDB

One could download MongoDB from http://www.mongodb.org/downloads page. Once downloaded, do the following to get started.

  • Open a command prompt & goto bin folder found within MongoDB root folder.
  • Before starting MongoDB server, create the data directory within root folder.
  • Start the MongoDB server with command such as “mongod -dbpath <path-to-mongodb-root-folder>”
  • Open another command prompt and goto bin folder.
  • Execute “mongo” command and you are all set. Access various DB commands at http://docs.mongodb.org/manual/reference/command/.
  • As there is no command to create the database, give “use testdb” and testdb would be created.
  • Create a collection using following command – db.createCollection( “users” )
  • Check whether the collection is created by executing “show collections” command.
  • Insert records using command: db.runCommand( { insert: “users”, documents: [ { _id: 1, firstname: “ajitesh”, lastname: “shukla” }] } )
  • Check the document using command, db.testdb.find()

 

Step 2: Spring Data MongoDB Libraries

Download following libraries and place them within WEB-INF/lib folder and the classpath. These are latest libraries at the time of writing the blog.

 

Step 3: Create Users Class

Create User class pertaining to “users” document within MongoDB. Following is the sample code:

package com.vitalflux.hellomongo;

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

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

    @Id
    private String id;

    private String firstname;
    private String lastname;

    public Users() {}

    public Users(String firstName, String lastName) {
        this.firstname = firstName;
        this.lastname = lastName;
    }

  /**
  * @return the id
  */ public String getId() {
  return id;
 }

 /**
  * @param id the id to set
  */ public void setId(String id) {
  this.id = id;
 }

 /**
  * @return the firstName
  */ public String getFirstName() {
  return firstname;
 }

 /**
  * @param firstName the firstName to set
  */ public void setFirstName(String firstName) {
  this.firstname = firstName;
 }

 /**
  * @return the lastName
  */ public String getLastName() {
  return lastname;
 }

 /**
  * @param lastName the lastName to set
  */ public void setLastName(String lastName) {
  this.lastname = lastName;
 }

}

 

Step 4: Create UsersRepository Interface
package com.vitalflux.mongo.repositories;

import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import com.vitalflux.hellomongo.Users;

@Repository
public interface UsersRepository extends MongoRepository<Users, String>{
}

 

Step 5: Create A Controller
package com.vitalflux.hellomongo;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.vitalflux.mongo.repositories.UsersRepository;

@Controller
public class HelloMongoController {

 @Autowired
 private UsersRepository repository;

 @RequestMapping(value = "/", method = RequestMethod.GET)
 public ModelAndView helloWorld( ModelMap model ) {
  List users = repository.findAll();

  ModelAndView modelAndView = new ModelAndView("index");  
  modelAndView.addObject("users", users );
  return modelAndView;
 }
}

 

Step 6: Configure Spring-Servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-4.0.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
     http://www.springframework.org/schema/data/mongo
     http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd">

<context:component-scan base-package="com.vitalflux.hellomongo" />
<context:component-scan base-package="com.vitalflux.mongo.repositories" />

     <!-- Configuration defining views files -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/views/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

<!-- Factory bean that creates the Mongo instance -->
<bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">
    <property name="host" value="localhost" />
</bean>

<!-- MongoTemplate for connecting and quering the documents in the database -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
     <constructor-arg name="mongo" ref="mongo" />
     <constructor-arg name="databaseName" value="test" />
</bean>

<mongo:repositories base-package="com.vitalflux.mongo.repositories" />

</beans>

 

Step 7: Create A View, index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ page import="java.util.List"%>
<%@ page import="com.vitalflux.hellomongo.Users"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
<%
List<Users> users = (List<Users>) request.getAttribute( "users" );
%>
<%
for (Users user : users) {
pageContext.setAttribute("firstname", user.getFirstName() );
%>
<div>${firstname}</div>
<%
}
%>
</body>
</html>

[adsenseyu1]

Ajitesh Kumar

I have been recently working in the area of Data analytics including Data Science and Machine Learning / Deep Learning. I am also passionate about different technologies including programming languages such as Java/JEE, Javascript, Python, R, Julia, etc, and technologies such as Blockchain, mobile computing, cloud-native technologies, application security, cloud computing platforms, big data, etc. For latest updates and blogs, follow us on Twitter. I would love to connect with you on Linkedin. Check out my latest book titled as First Principles Thinking: Building winning products using first principles thinking. Check out my other blog, Revive-n-Thrive.com

View Comments

  • Hi Ajitesh I'm glad that i found you're site randomly .You're articles on mongodb helped me a lot to learn and explore more into mongoDb using java

    Thanks
    Venkata Naveen Tekkem

  • Hi,

    I am trying your example and getting below error. Could you please help

    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'helloMongoController': Unsatisfied dependency expressed through field 'repository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'usersRepository': Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'usersRepository': Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)

    Thanks,
    Mahendra

Recent Posts

Bias-Variance Trade-off in Machine Learning: Examples

Last updated: 1st May, 2024 The bias-variance trade-off is a fundamental concept in machine learning…

16 hours ago

Mean Squared Error vs Cross Entropy Loss Function

Last updated: 1st May, 2024 As a data scientist, understanding the nuances of various cost…

16 hours ago

Cross Entropy Loss Explained with Python Examples

Last updated: 1st May, 2024 In this post, you will learn the concepts related to…

16 hours ago

Logistic Regression in Machine Learning: Python Example

Last updated: 26th April, 2024 In this blog post, we will discuss the logistic regression…

6 days ago

MSE vs RMSE vs MAE vs MAPE vs R-Squared: When to Use?

Last updated: 22nd April, 2024 As data scientists, we navigate a sea of metrics to…

7 days ago

Gradient Descent in Machine Learning: Python Examples

Last updated: 22nd April, 2024 This post will teach you about the gradient descent algorithm…

1 week ago