mongodb与spring整合

本文介绍了如何使用Maven创建项目并集成Spring、MongoDB和日志框架,包括配置依赖、修改配置文件以及实现基本的MongoDB操作。

1 创建maven工程

2 修改pom.xml

   <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>4.1.2.RELEASE</version>
</dependency>

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.5.8</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.5.8</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.5.8</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
    </dependency>

<dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-mongodb</artifactId>
   <version>1.6.1.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.mongodb</groupId>
   <artifactId>mongo-java-driver</artifactId>
   <version>2.13.0-rc0</version>
</dependency>

<dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-mongodb-cross-store</artifactId>
   <version>1.6.1.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-mongodb-log4j</artifactId>
   <version>1.6.1.RELEASE</version>
</dependency>


  </dependencies>


3 修改application.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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/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">

<!-- 用以指定property文件的路径信息
<context:property-placeholder location=""/> -->
<context:component-scan base-package="mongodb.mongodb.dao.impl" />
<!-- replica-set="" 属性表示:副本集
配置如下:
<mongo:mongo id="replicaSetMongo" replica-set="127.0.0.1:27017,localhost:27018"/>
-->
<!-- Default bean name is 'mongo' -->
<mongo:mongo host="127.0.0.1" port="27017" id="mongo01">
<!-- <mongo:options auto-connect-retry="" connect-timeout="" slave-ok=""  /> -->
</mongo:mongo>

<!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
<mongo:db-factory dbname="myinfo" mongo-ref="mongo01" />

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
</bean>

<!-- 映射转换器  扫描base-package目录  根据注释把它们作为mongodb的一个集合 -->
<mongo:mapping-converter base-package="mongodb.mongodb.form" />

<mongo:repositories base-package="mongodb.mongodb.dao.impl" />

</beans>


4 mongodb.mongodb.form包下定义实体类如下:

package mongodb.mongodb.form;


import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;


@CompoundIndexes({@CompoundIndex(name="age_idx",def="{'name':1,'title':1}")})  //对name和title创建组合索引
@Document(collection="persons")
public class Persons {


@Id
private String id ;

private String name ;
private String title ;
private int price ;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}

}


5 DAO对象

package mongodb.mongodb.dao;


import java.util.List;


import mongodb.mongodb.form.Persons;


public interface PersonsDao {


public void test();
public void createCollection();
public List<Persons> findList(int skip , int limit);
public Persons findone(String id);
public Persons findByName(String name);
public void insert(Persons persons);
public void update(Persons persons);

}


6 Dao对象的实现

package mongodb.mongodb.dao.impl;


import java.util.List;
import java.util.Set;


import mongodb.mongodb.dao.PersonsDao;
import mongodb.mongodb.form.Persons;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;


@Repository
public class PersonsDaoImpl implements PersonsDao {


public static final Logger logger = LoggerFactory.getLogger(PersonsDaoImpl.class);

@Autowired
private MongoTemplate mongoTemplate ;

public void test() {
// TODO Auto-generated method stub
Set<String> names = this.mongoTemplate.getCollectionNames() ;
for( String name : names ){
System.out.println(name);
}

}


public void createCollection() {
// TODO Auto-generated method stub
if(this.mongoTemplate.collectionExists(Persons.class)){
System.out.println("集合persons不存在,需创建");
this.mongoTemplate.createCollection(Persons.class) ;
}else{
System.out.println("集合persons存在,不需创建");
}
}


public List<Persons> findList(int skip, int limit) {
// TODO Auto-generated method stub
Query query = new Query() ;

query.with(new Sort(new Order(Direction.ASC, "_id"))) ;

return this.mongoTemplate.find(query, Persons.class) ;

}


public Persons findone(String id) {
return this.mongoTemplate.findById(id, Persons.class) ;
}


public Persons findByName(String name) {
// TODO Auto-generated method stub

Query query = new Query() ;
query.addCriteria(new Criteria("name").is(name)) ;
return this.mongoTemplate.findOne(query, Persons.class) ;

}


public void insert(Persons persons) {
// TODO Auto-generated method stub
this.mongoTemplate.insert(persons);
}


public void update(Persons persons) {
// TODO Auto-generated method stub
// this.mongoTemplate.update
}


}


测试:

package mongodb.mongodb;


import mongodb.mongodb.dao.PersonsDao;
import mongodb.mongodb.dao.impl.PersonsDaoImpl;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args ){
    ApplicationContext context = new ClassPathXmlApplicationContext("/dispatch-servlet.xml") ;
    PersonsDao dao = context.getBean(PersonsDaoImpl.class) ;
    dao.test();
    }
    
}


结果(列出数据库myinfo中的所有集合名称):

blog
books
files01
fs.chunks
fs.files
inventory
map_reduce_example
map_reduce_example01
map_reduce_example02
map_reduce_sessions
map_reduec_example
myInfo01
orders
persons
score
scores
sessions
survey
system.indexes



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值