一直都想学习MongoDB,却一直被心中的懒惰做祟。还好幸运的是,今天我尝试着学习,配置了一下。 html
因为本人一直对spring的喜好,因此网上查看了一下spring是否像支持Hibernate、mybatis那样,有一个支持MongoDB的适配。幸运的是,这个东西已经存在了,即spring-data-mongodb-1.3.2.RELEASE.jar。 java
因而,我采用Maven,搭建了一个简单的框架,测试了个人程序。 spring
首先,须要在classpath下添加applicationContext.xml文件,以下配置: mongodb
<?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/context http://www.springframework.org/schema/context/spring-context-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/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <context:property-placeholder location="classpath*:conf/mongo.properties" /> <!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 --> <mongo:mongo host="localhost" port="27017" /> <!-- mongo的工厂,经过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动建立 --> <mongo:db-factory dbname="test" 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.yanmushi.blog.entity" /> <!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 --> <mongo:repositories base-package="com.yanmushi.blog.service" /> <!-- To translate any MongoExceptions thrown in @Repository annotated classes --> <context:annotation-config /> </beans>
接下来,能够经过以下的测试用例,测试MongoDB的连通性: 数据库
package test; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring-mongo.xml") public class MongoTest { @Resource MongoTemplate mongoTemplate; @Test public void test() { DB db = mongoTemplate.getDb(); System.out.println(db); DBCollection s = mongoTemplate.getCollection("foo"); DBCursor c = s.find(); while (c.hasNext()) { DBObject obj = c.next(); System.out.println(obj); } } }
期间发送了一个问题,是由于我没有开启MongoDB的server。 apache
接下来,咱们来看spring的配置文件中,mongo:mapping-converter和mongo:repositories这两个标签。 api
对于mongo:mapping-converter,它和jpa有些类似,主要是来映射java对象和Collection中文档的关系。 mybatis
针对mongo:repositories,它会自动向该path下的MongoRepository类型的类中,注入Mongo。而对于spring的MongoRepository是不须要写实现的,只须要按照命名规则写好接口便可(相似jpa)。 app
附注:
1. Maven依赖: 框架
<dependencies> <!-- Mongo --> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> </dependency> <!-- spring framework --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <scope>test</scope> </dependency> <!-- commons --> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </dependency> <dependency> <groupId>javax.enterprise</groupId> <artifactId>cdi-api</artifactId> </dependency> </dependencies>
参考文档:
http://www.open-open.com/lib/view/open1331791414140.html