mongodb集成spring

1:首先需要下載mongodb的java驅動包 

 https://github.com/mongodb/mongo-java-driver/downloads


2:需要下載spring集成mongodb的包

 下載途徑: 

                   a:去csdn下 

                   b:去http://projects.spring.io/spring-data-mongodb/ 使用Maven方式下載

                   c:網上其他地方找


要下載的包如下

spring-data-commons-core-1.2.0.M2.jar

spring-data-mongodb-1.0.0.M4.jar

spring-data-mongodb-cross-store-1.0.0.M4.jar

spring-data-mongodb-log4j-1.0.0.M4.jar


爲什麼選擇很老的1.0.0版本,是因爲我的spring框架是3.0.5的,不知道是不是spring版本低了的原因,選擇高點的如1.4.0反正會報錯



3:ok  包包都⑦了,開始編碼了,先說說配置文件

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<!-- spring配置文件目錄-->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

</web-app>

application-global.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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	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/aop 
	   		http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
	   		http://www.springframework.org/schema/context
	   		http://www.springframework.org/schema/context/spring-context-3.0.xsd
			http://www.springframework.org/schema/mvc 
			http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
			http://www.springframework.org/schema/data/mongo
    		http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">


	<!-- 獲取配置文件屬性 -->
	<bean id="placeholderConfig"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>classpath:db.properties</value>
		</property>
	</bean>

	<!-- Default bean name is 'mongo' -->
	<!-- 連接池配置詳細查看http://api.mongodb.org/java/2.7.2/com/mongodb/MongoOptions.html#connectionsPerHost 
		或者http://www.cnblogs.com/huangfox/archive/2012/04/01/2428947.html
	-->
	<mongo:mongo host="${datasource.host}" port="${datasource.port}">
		<mongo:options connections-per-host="10"
			threads-allowed-to-block-for-connection-multiplier="10"
			auto-connect-retry="true" />
	</mongo:mongo>


	<!-- Spring提供的mongodb操作模板-->
	<bean id="mongoTemplate"
		class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg ref="mongo" />
		<constructor-arg name="databaseName" value="${datasource.dbname}" />
	</bean>
	
</beans>


db.properties
#datasource.host=localhost
datasource.host=12.35.174.48
#datasource.port=27017
datasource.port=9933
datasource.dbname=logDB


datasource.username=test
datasource.passwd=test



4:spring的db操作模板MongoTemplate

      具體使用參考百度或者官網http://docs.spring.io/spring-data/data-mongodb/docs/current/api/org/springframework/data/mongodb/core/MongoTemplate.html#getDb()
  
程序啓動時,注入MongoTemplate模板

package dao.impl;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.data.mongodb.core.MongoTemplate;

import com.mongodb.DB;

public class AbstractBaseMongoTemplete  implements ApplicationContextAware {
    protected MongoTemplate mongoTemplate;  
    
    protected DB db;
	
    /** 
     * 設置mongoTemplate 
     * @param mongoTemplate the mongoTemplate to set 
     */  
    public void setMongoTemplate(MongoTemplate mongoTemplate) {  
        this.mongoTemplate = mongoTemplate;  
    }  
      
    public void setApplicationContext(ApplicationContext applicationContext)  
            throws BeansException {  
    	//System.out.println("ApplicationContextAware開始執行setApplicationContext方法");
        MongoTemplate mongoTemplate = applicationContext.getBean("mongoTemplate", MongoTemplate.class);  
        setMongoTemplate(mongoTemplate);  
        db=mongoTemplate.getDb();
    }  
}

5:具體操作類接口


public interface  IDbDao {

	/**
	 * 插入單個
	 * @param obj
	 * @return
	 */
	public abstract DBObject insert(DBObject obj);
	
	/**
	 * 插入json格式字符串
	 * @param jsonStr
	 * @return
	 */
	public abstract WriteResult insert(String jsonStr);
	/**
	 * 批量插入
	 * @param list
	 */
	public abstract void insertBatch(List<DBObject> list);
	/**
	 * 插入json文件
	 * @param list
	 */
	public abstract void insertFile(String fileName);

	/**
	 * 刪除單個
	 * @param obj
	 */
	public abstract void delete(DBObject obj);
	
	/**
	 * 批量刪除
	 * @param list
	 */
	public abstract void deleteBatch(List<DBObject> list);

	
	/**
	 * 修改
	 * @param searchFields  要修改的查詢條件
	 * @param updateFields  修改的值
	 */
	public abstract void update(DBObject searchFields,DBObject updateFields);

	/**
	 * 按條件查詢
	 * @return
	 */
	public abstract List<BasicDBObject> find();
	
	/**
	 * 按條件查詢
	 * @param query 查詢條件
	 * @return
	 */
	public abstract List<BasicDBObject> find(DBObject query);
	 
	/**
	 * 排序查詢
	 * @param query
	 * @param sort   new BasicDBObject("age", true)   則對age字段降序  注意1是升序,-1是降序 
	 * @param _class  要返回的實體bean類型
	 * @return
	 */
	public abstract List<BasicDBObject> find(DBObject query,DBObject sort);
	
	/**
	 * 分頁查詢
	 * @param query 查詢條件
	 * @param start 起始
	 * @param limit 每頁多少數據
	 * @return
	 */
	public abstract List<BasicDBObject> find(DBObject query,int start,int limit);
	
	/**
	 * 分頁查詢
	 * @param query 查詢條件
	 * @param sort  排序
	 * @param start 起始
	 * @param limit 每頁多少數據
	 * @return
	 */
	public abstract List<BasicDBObject> find(DBObject query,DBObject sort,int start,int limit);
	
	/**
	 * 按條件查詢
	 * @param _class  要返回的實體bean類型
	 * @return
	 */
	public abstract List<Object> find(Class _class);
	
	/**
	 * 按條件查詢
	 * @param query 查詢條件
	 * @param _class  要返回的實體bean類型
	 * @return
	 */
	public abstract List<Object> find(DBObject query,Class _class);
	 
	/**
	 * 排序查詢
	 * @param query 查詢條件
	 * @param sort   new BasicDBObject("age", true)   則對age字段降序  注意1是升序,-1是降序 
	 * @param _class  要返回的實體bean類型
	 * @return
	 */
	public abstract List<Object> find(DBObject query,DBObject sort,Class _class);
	
	/**
	 * 分頁查詢
	 * @param query 查詢條件
	 * @param start 起始
	 * @param limit 每頁多少數據
	 * @param _class  要返回的實體bean類型
	 * @return
	 */
	public abstract List<Object> find(DBObject query,int start,int limit,Class _class);
	
	/**
	 * 分頁查詢
	 * @param query 查詢條件
	 * @param sort  排序
	 * @param start 起始
	 * @param limit 每頁多少數據
	 * @param _class  要返回的實體bean類型
	 * @return
	 */
	public abstract List<Object> find(DBObject query,DBObject sort,int start,int limit,Class _class);
	/**
	 * 按條件查詢,返回查詢個數
	 * @param query 查詢條件
	 * @return
	 */
	public abstract int findCount(DBObject query);
	 
	/**
	 * 排序查詢,返回查詢個數
	 * @param query
	 * @param sort   new BasicDBObject("age", true)   則對age字段降序  注意1是升序,-1是降序 
	 * @param _class  要返回的實體bean類型
	 * @return
	 */
	public abstract int findCount(DBObject query,DBObject sort);
	/**
	 * 獲取總數
	 * @param obj
	 * @return
	 */
	public abstract long getCount(DBObject obj);
	
	/**
	 * 獲取總數
	 * @param obj
	 * @return
	 */
	public abstract long getCount();
	

	/**
	 * 利用java驅動自帶函數分組查詢
	 * @param key 用來分組文檔的字段
	 * @param cond 執行過濾的條件
	 * @param initial reduce中使用變量的初始化
	 * @param reduce reduce(參數:當前文檔和累加器文檔.)
	 * @param fn
	 * @return
	 */
	public abstract DBObject group(DBObject key,DBObject cond,DBObject initial,String reduce,String fn );
	
	
	/**
	 * 使用聚合框架(參考http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/)
	 * @param firstDb
	 * @param optionDb
	 * @return
	 */
	public abstract AggregationOutput  aggregation(DBObject firstDb,DBObject ...optionDb);
	
	public abstract DBCollection getCollection();
	
	/**
	 * 創建索引
	 * @param obj  new BasicDBObject("name", 1)); // 1代表升序 -1代表降序
	 */


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章