Java 中使用 SPRING DATA - MONGODB 开发

Spring Data 提供了一组在 Java 中访问 MongoDB 数据的API,使得我们可以使用类似 Spring 的 JdbcTemplate 类的方式来操作MongoDB,极大地简化了我们的开发步骤。


一、准备工作
和往常的开发步骤一样,首先我们需要准备一系列 jar 包,这里我截了一张图,如下所示。

其中 jar 包 commons-beanutils-1.8.3、commons-lang-2.6、commons-collections-3.2.1、commons-logging-1.1.1、ezmorph-1.0.6、json-lib-2.4,可以不导入,这些包是用来支持项目中使用JSON的。如果需要需要这些包,也可以从我的这篇文章中得到 http://blog.csdn.net/wugewuge/article/details/8074272。

【Java 中使用 SPRING DATA - MONGODB 开发】spring-data-mongo-1.1.0.M1.zip
mongo-2.9.1.jar
spring-framework-3.1.1.RELEASE.zip
aopalliance-1.0.jar
spring-web-3.2.0.M2.jar



二、数据库连接配置
使用Spring Data 连接 MongoDB 数据库有2种方式:一种是类似JDBC的方式得到连接,另一种是通过Spring读取XML配置文件的方式得到连接。
这里先介绍第一种连接方式,后续会介绍第二种连接。
1. 创建配置文件 “DataSource.properties” 用于存储数据库信息,方便以后修改。内容如下:


Host=127.0.0.1 Port=27017 Database=king UserName=king Password=king

以上配置分别为:目标数据库所在服务器地址,数据库连接端口,数据库名字,用户名和密码。*请根据实际情况进行配置。


2. 获取数据库连接
这里就不介绍负责数据库连接的接口和类了,有兴趣的话可以点击链接查看官方文档:接口 MongoOperations 和类 MongoTemplate。其中MongoTemplate 类实现了接口 MongoOperations。
下面我附上了自己写的MongoUtil类的源代码。该类主要封装了获取MongoTemplate实例的代码。

package com.report.util; import java.net.UnknownHostException; import java.util.Locale; import java.util.ResourceBundle; import org.springframework.data.authentication.UserCredentials; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.SimpleMongoDbFactory; import com.mongodb.Mongo; public class MongoUtil { private volatile static MongoOperations mongoOperation; private static final String CONFIG_FILE_NAME = "DataSource"; private static final String KEY_HOST = "Host"; private static final String KEY_PORT = "Port"; private static final String KEY_DATABASE = "Database"; private static final String KEY_USERNAME = "UserName"; private static final String KEY_PASSWORD = "Password"; private MongoUtil() { } public static MongoOperations getMongoOperation() { if (mongoOperation == null) { ResourceBundle resourceBundle = ResourceBundle.getBundle( CONFIG_FILE_NAME, Locale.getDefault()); //获取配置文件“DataSource.properties” String hostAddr = resourceBundle.getString(KEY_HOST) + ":" + resourceBundle.getString(KEY_PORT); UserCredentials userCredentials = new UserCredentials( resourceBundle.getString(KEY_USERNAME), resourceBundle.getString(KEY_PASSWORD)); try { mongoOperation = new MongoTemplate( new SimpleMongoDbFactory(new Mongo(hostAddr), resourceBundle.getString(KEY_DATABASE), userCredentials)); } catch (UnknownHostException e) { e.printStackTrace(); } } return mongoOperation; }}


3. 在MongoDB中创建测试数据数据库、表和用户



MongoDB中创建数据库时,使用命令“Use XXX”,所以需要做一些额外的操作,数据库才会被创建,这里选择创建表“king”,如果不需要,可以使用“db.king.drop()”删除该表。MongoDB详细指令说明文档点此,也可在输入“help”寻求帮助。


4. 编写测试代码,验证数据库连通性
创建测试类TestMongoDB.java

package com.report.Tests; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import com.report.util.MongoUtil; public class TestMongoDB { private String firstName; private String lastName; TestMongoDB(String firstName, String lastName ){ this.firstName = firstName; this.lastName = lastName; } 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 static void main(String[] args){ TestMongoDB test = new TestMongoDB("John", "Connor"); MongoUtil.getMongoOperation().insert(test); TestMongoDB stored = MongoUtil.getMongoOperation().findOne(new Query(Criteria.where("firstName").is(test.getFirstName())), TestMongoDB.class); if (stored != null) System.out.println(stored.getFirstName() + " " + stored.getLastName()); } }

Eclipse Console 输出信息: John Connor 验证数据库记录:


结果与预期一样,在Java 中使用 SPRING DATA - MONGODB 开发成功。

    推荐阅读