Spring + mongo配置

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

相關文章
相關標籤/搜索