一直都想學習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