Spring Data MongoDB example with Spring MVC 3.2
Spring Data MongoDB example with Spring MVC 3.2
Here is another example web application built with Spring MVC 3.2 and Spring Data 1.2, integrating with the MongoDB document database.
STEP 1: Create new webapp project, I will use maven for this. (Note: I am on my macbook with Maven 3 and Java 6 installed.)
mvn archetype:generate
-DgroupId=com.manishchhabra.blog
-DartifactId=HelloSpringWithMongoDB
-DarchetypeArtifactId=maven-archetype-webapp
-DinteractiveMode=false
You could create the maven project directly in your IDE as well. But I usually create it on the terminal and import it in eclipse by using the following command (Note: The following command is run within your newly created project directory, i.e. run -> cd HelloSpringWithMongoDB)
mvn eclipse:eclipse -Dwtpversion=2.0
STEP 2: Add Spring Framework 3.2 and Spring Data 1.2 dependencies to your pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
< dependency > < groupId >org.springframework</ groupId > < artifactId >spring-orm</ artifactId > < version >3.2.0.RELEASE</ version > </ dependency > < dependency > < groupId >org.springframework</ groupId > < artifactId >spring-webmvc</ artifactId > < version >3.2.0.RELEASE</ version > </ dependency > < dependency > < groupId >org.springframework.data</ groupId > < artifactId >spring-data-mongodb</ artifactId > < version >1.2.0.RELEASE</ version > </ dependency > |
STEP 3: Update your web.xml (src/main/webapp/WEB-INF/web.xml) to use Spring’s DispatcherServlet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
< web-app xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version = "2.5" > < display-name >Spring With MongoDB Web Application</ display-name > < servlet > < servlet-name >dispatcher</ servlet-name > < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class > < load-on-startup >1</ load-on-startup > </ servlet > < servlet-mapping > < servlet-name >dispatcher</ servlet-name > < url-pattern >/</ url-pattern > </ servlet-mapping > < context-param > < param-name >contextConfigLocation</ param-name > < param-value >/WEB-INF/dispatcher-servlet.xml</ param-value > </ context-param > < listener > < listener-class >org.springframework.web.context.ContextLoaderListener</ listener-class > </ listener > </ web-app > |
STEP 4: Add your spring configuration to the dispatcher-servlet.xml
- Use MongoFactoryBean to connect to the MongoDB instance.
- Use MongoTemplate to connect and make queries to the database.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<? xml version = "1.0" encoding = "UTF-8" ?> < beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:context = "http://www.springframework.org/schema/context" xmlns:p = "http://www.springframework.org/schema/p" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd" > < context:component-scan base-package = "com.manishchhabra.blog" /> <!-- 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 > <!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes --> < bean class = "org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> < bean id = "jspViewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix = "/WEB-INF/jsp/" p:suffix = ".jsp" /> </ beans > |
STEP 5: Create a model (using Person as an example), service and controller in the new source directory src/main/java
Model
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package com.manishchhabra.blog.model; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document public class Person { @Id private String id; private String name; public String getId() { return id; } public void setId(String id) { this .id = id; } public String getName() { return name; } public void setName(String name) { this .name = name; } } |
Service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package com.manishchhabra.blog.service; import java.util.List; import java.util.UUID; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Repository; import com.manishchhabra.blog.model.Person; @Repository public class PersonService { @Autowired private MongoTemplate mongoTemplate; public static final String COLLECTION_NAME = "person" ; public void addPerson(Person person) { if (!mongoTemplate.collectionExists(Person. class )) { mongoTemplate.createCollection(Person. class ); } person.setId(UUID.randomUUID().toString()); mongoTemplate.insert(person, COLLECTION_NAME); } public List<Person> listPerson() { return mongoTemplate.findAll(Person. class , COLLECTION_NAME); } public void deletePerson(Person person) { mongoTemplate.remove(person, COLLECTION_NAME); } public void updatePerson(Person person) { mongoTemplate.insert(person, COLLECTION_NAME); } } |
Controller for the CRUD operations
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package com.manishchhabra.blog.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.View; import org.springframework.web.servlet.view.RedirectView; import com.manishchhabra.blog.model.Person; import com.manishchhabra.blog.service.PersonService; @Controller public class PersonController { @Autowired private PersonService personService; @RequestMapping (value = "/person" , method = RequestMethod.GET) public String getPersonList(ModelMap model) { model.addAttribute( "personList" , personService.listPerson()); return "output" ; } @RequestMapping (value = "/person/save" , method = RequestMethod.POST) public View createPerson( @ModelAttribute Person person, ModelMap model) { if (StringUtils.hasText(person.getId())) { personService.updatePerson(person); } else { personService.addPerson(person); } return new RedirectView( "/HelloSpringWithMongoDB/person" ); } @RequestMapping (value = "/person/delete" , method = RequestMethod.GET) public View deletePerson( @ModelAttribute Person person, ModelMap model) { personService.deletePerson(person); return new RedirectView( "/HelloSpringWithMongoDB/person" ); } } |
STEP 5: Create a JSP Page in the folder WEB-INF/jsp called output.jsp (This will currently invoke create and delete).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> < html > < body > < h2 >Here is a simple CRUD using Spring MVC and MongoDB.</ h2 > < form action = "person/save" method = "post" > < input type = "hidden" name = "id" > < label for = "name" >Person Name</ label > < input type = "text" id = "name" name = "name" /> < input type = "submit" value = "Submit" /> </ form > < table border = "1" > < c:forEach var = "person" items = "${personList}" > < tr > < td >${person.name}</ td >< td >< input type = "button" value = "delete" onclick = "window.location=‘person/delete?id=${person.id}‘" /></ td > </ tr > </ c:forEach > </ table > </ body > </ html > |
STEP 6: That’s it! Its time to run your project. You could either run directly from eclipse or you could run “mvn package” to build a war file and deploy it to your application server. I tested this on tomcat running on port 8080 (http://localhost:8080/HelloSpringWithMongoDB/person) and I could store and delete person with provided names. Working! yeah.. Here is a picture of me playing with the app
You can view or download the full project code athttps://github.com/manishchhabra/HelloSpringWithMongoDB
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。