目录

spring整合mongodb

加入pom依赖

pom.xml
<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-mongodb</artifactId>
	<version>1.2.1.RELEASE</version>
</dependency>

引入placeholder

application-context.xml
<!-- 配置文件位置 -->
<context:property-placeholder location="classpath:/mongodb.properties" />

application-cache-mongodb.xml

application-cache-mongodb.xml
<?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:mongo="http://www.springframework.org/schema/data/mongo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/data/mongo     
        http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd 
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
	<mongo:mongo host="${mongodb.host}" port="${mongodb.port}" />
 
	<!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
	<mongo:db-factory dbname="record" mongo-ref="mongo" />
 
	<!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->
	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
	</bean>
 
	<!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->
	<mongo:mapping-converter base-package="com.gxx.record.base.vo" />
 
</beans>

mongodb.properties

mongodb.properties
# Mongodb settings
mongodb.host=121.43.104.34
mongodb.port=27017

Student.java

Student.java
package com.gxx.record.base.vo;
 
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
 
/**
 * <dl>
 *    <dt><b>Title:</b></dt>
 *    <dd>
 *    	mongodb学生实体
 *    </dd>
 *    <dt><b>Description:</b></dt>
 *    <dd>
 *    	<p>none
 *    </dd>
 * </dl>
 *
 * @author Administrator
 * @version 1.0, 2015年7月27日
 * @since record
 *
 */
@Document(collection="student")
public class Student {
	@Id
	private String id;
	private String name;
	private Friend friend;
	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;
	}
	public Friend getFriend() {
		return friend;
	}
	public void setFriend(Friend friend) {
		this.friend = friend;
	}
}

Friend.java

Friend.java
package com.gxx.record.base.vo;
/**
 * <dl>
 *    <dt><b>Title:</b></dt>
 *    <dd>
 *    	mongodb朋友实体
 *    </dd>
 *    <dt><b>Description:</b></dt>
 *    <dd>
 *    	<p>none
 *    </dd>
 * </dl>
 *
 * @author Administrator
 * @version 1.0, 2015年7月27日
 * @since record
 *
 */
public class Friend {
	String name;
	boolean sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public boolean isSex() {
		return sex;
	}
	public void setSex(boolean sex) {
		this.sex = sex;
	}
 
}

MongodbDto.java

MongodbDto.java
package com.gxx.record.dto;
/**
 * <dl>
 *    <dt><b>Title:</b></dt>
 *    <dd>
 *    	mongodb传输对象
 *    </dd>
 *    <dt><b>Description:</b></dt>
 *    <dd>
 *    	<p>none
 *    </dd>
 * </dl>
 *
 * @author Administrator
 * @version 1.0, 2015年7月27日
 * @since record
 *
 */
public class MongodbDto extends BaseDto {
	private String name;//姓名
	private String friendName;//朋友姓名
	private boolean friendSex;//朋友性别
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getFriendName() {
		return friendName;
	}
	public void setFriendName(String friendName) {
		this.friendName = friendName;
	}
	public boolean isFriendSex() {
		return friendSex;
	}
	public void setFriendSex(boolean friendSex) {
		this.friendSex = friendSex;
	}
}

MongodbService.java

MongodbService.java
package com.gxx.record.service;
 
import com.gxx.record.base.vo.Student;
import com.gxx.record.dto.MongodbDto;
 
/**
 * <dl>
 * <dt><b>Title:</b></dt>
 * <dd>
 * mongodb服务接口</dd>
 * <dt><b>Description:</b></dt>
 * <dd>
 * <p>
 * none</dd>
 * </dl>
 *
 * @author Administrator
 * @version 1.0, 2015年7月27日
 * @since record
 *
 */
public interface MongodbService {
	/**
	 * save
	 * 
	 * @param mongodbDto
	 * @return
	 */
	public boolean save(MongodbDto mongodbDto);
 
	/**
	 * get
	 * 
	 * @param name
	 * @return
	 */
	public Student get(String name);
}

MongodbServiceImpl.java

MongodbServiceImpl.java
package com.gxx.record.service.impl;
 
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
 
import com.gxx.record.base.vo.Friend;
import com.gxx.record.base.vo.Student;
import com.gxx.record.dto.MongodbDto;
import com.gxx.record.service.MongodbService;
 
/**
 * <dl>
 *    <dt><b>Title:</b></dt>
 *    <dd>
 *    	mongodb服务实现类
 *    </dd>
 *    <dt><b>Description:</b></dt>
 *    <dd>
 *    	<p>none
 *    </dd>
 * </dl>
 *
 * @author Administrator
 * @version 1.0, 2015年7月23日
 * @since record
 *
 */
@Service("mongodbService")
public class MongodbServiceImpl implements MongodbService {
	/**
	 * 日志处理器
	 */
	private final Logger logger = Logger.getLogger(MongodbServiceImpl.class);
 
	@Autowired
	private MongoTemplate mongoTemplate;
 
	@Override
	public boolean save(MongodbDto mongodbDto) {
		Student student = get(mongodbDto.getName());
		if(null == student){
			student = new Student();
		}
		student.setName(mongodbDto.getName());
		Friend friend = new Friend();
		friend.setName(mongodbDto.getFriendName());
		friend.setSex(mongodbDto.isFriendSex());
		student.setFriend(friend);
		mongoTemplate.save(student);
		logger.info("插入mongodb完成!");
		return false;
	}
 
	@Override
	public Student get(String name) {
		Query query = new Query();  
        query.addCriteria(new Criteria("name").is(name));  
		Student student = mongoTemplate.findOne(query, Student.class);
		logger.info("查询到mongodb实体:" + student);
		return student;
	}
}

MongodbController.java

MongodbController.java
package com.gxx.record.web.mongodb;
 
import javax.servlet.http.HttpServletRequest;
 
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
 
import com.gxx.record.base.vo.Student;
import com.gxx.record.dto.MongodbDto;
import com.gxx.record.service.MongodbService;
 
/**
 * <dl>
 *    <dt><b>Title:</b></dt>
 *    <dd>
 *    	MongodbController
 *    </dd>
 *    <dt><b>Description:</b></dt>
 *    <dd>
 *    	<p>none
 *    </dd>
 * </dl>
 *
 * @author Administrator
 * @version 1.0, 2015年7月27日
 * @since record
 *
 */
@Controller
@RequestMapping("/mongodb/")
public class MongodbController {
	/**
	 * 日志处理器
	 */
	private final Logger logger = Logger.getLogger(MongodbController.class);
 
	@Autowired
	private MongodbService mongodbService;
 
	@RequestMapping(value = "/preMongodbFtl", method = RequestMethod.GET)
	public String preMongodbFtl() {
		return "mongodb/preMongodbFtl";
	}
 
	/**
	 * 设置
	 * @param request
	 * @param mongodbDto
	 * @return
	 */
	@RequestMapping(value = "/save",produces="application/json")
	public @ResponseBody MongodbDto save(HttpServletRequest request, MongodbDto mongodbDto) {
		logger.info("设置:姓名=[" + mongodbDto.getName() + "],朋友姓名=[" + mongodbDto.getFriendName() + "],"
				+ "朋友性别=[" + mongodbDto.isFriendSex() + "]");
		/**
		 * 1.设置值
		 */
		mongodbService.save(mongodbDto);
		/**
		 * 2.返回结果
		 */
		mongodbDto.setSuccess(true);
		mongodbDto.setMessage("设置成功!");
		return mongodbDto;
	}
 
	/**
	 * 获取值
	 * @param request
	 * @param mongodbDto
	 * @return
	 */
	@RequestMapping(value = "/get",produces="application/json")
	public @ResponseBody MongodbDto get(HttpServletRequest request, MongodbDto mongodbDto) {
		logger.info("获取值:姓名=[" + mongodbDto.getName() + "]");
		/**
		 * 1.获取学生
		 */
		Student student = mongodbService.get(mongodbDto.getName());
		/**
		 * 2.返回结果
		 */
		if(student == null){
			mongodbDto.setSuccess(false);
			mongodbDto.setMessage("该姓名[" + mongodbDto.getName() + "]不存在");
		} else {
			mongodbDto.setSuccess(true);
			mongodbDto.setMessage("获取成功");
			mongodbDto.setFriendName(student.getFriend().getName());
			mongodbDto.setFriendSex(student.getFriend().isSex());
		}
		return mongodbDto;
	}
}

preMongodbFtl.ftl

preMongodbFtl.ftl
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>mongodb页面</title>
	</head>
	<body>
		<form action="/record/mongodb/save.htm" method="post">
			<table border="1">
				<tr><td>姓名:</td><td><input type="text" name="name"/></td></tr>
				<tr><td>朋友姓名:</td><td><input type="text" name="friendName"/></td></tr>
				<tr>
					<td>朋友性别:</td>
					<td>
						<select name="friendSex">
							<option value="true"></option>
							<option value="false"></option>
						</select>
					</td>
				</tr>
				<tr><td colspan="2" align="center"><input type="submit" value="设置"/></td></tr>
			</table>
		</form>
		<form action="/record/mongodb/get.htm" method="post">
			<table border="1">
				<tr><td>姓名:</td><td><input type="text" name="name"/></td></tr>
				<tr><td colspan="2" align="center"><input type="submit" value="获取"/></td></tr>
			</table>
		</form>
	</body>
</html>

演示

gxx@iZ23goxo66aZ:~$ mongo #进入mongodb
MongoDB shell version: 2.4.9 #当前版本
connecting to: test #默认连接test数据库
> show dbs #查看所有数据库,看到程序自动创建的record数据库
local   0.078125GB
record  0.203125GB
test    0.078125GB
> use record #切换到record数据库
switched to db record
> show collections #查看record数据库中所有的集合
student
system.indexes
> db.student.find() #查看student集合中所有的文档
{ "_id" : ObjectId("55b5958244f43fa4565e6079"), "_class" : "com.gxx.record.base.vo.Student", "name" : "关向辉", "friend" : { "name" : "沈云龙", "sex" : true } }
{ "_id" : ObjectId("55b595e944f43fa4565e607a"), "_class" : "com.gxx.record.base.vo.Student", "name" : "tt", "friend" : { "name" : "aa", "sex" : true } }
> exit #退出mongodb
bye
gxx@iZ23goxo66aZ:~$