
这篇文章,主要是作为一个记录,记录我一个小时之前搞定这个东西的兴奋心情。spring mongodb主要是mongodb-java-driver 进行了一些封装,然后可以配合强大的spring使用。我觉得可以简单把它看成一个mongo的”ORM”框架。通过我从星期五到星期天的捣腾,我发现熟悉spring 框架本身其实是最重要的。好下面直接上吧:
首先我在eclipse里面建了一个maven项目,你需要添加如下依赖信息(这里用到的spring框架是3.0.6.RELEASE版本):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| UTF-8 3.0.6.RELEASE 1.6.1
junit junit 4.8.1 test
org.springframework.data spring-data-mongodb 1.0.2.RELEASE
log4j log4j 1.2.16
org.slf4j slf4j-api ${slf4j.version}
org.slf4j jcl-over-slf4j ${slf4j.version}
org.slf4j slf4j-log4j12 ${slf4j.version}
org.springframework spring-core ${spring.version}
commons-logging commons-logging
org.springframework spring-test ${spring.version} test
commons-logging commons-logging
org.springframework spring-context ${spring.version}
org.springframework spring-aop ${spring.version}
cglib cglib 2.2
org.mongodb mongo-java-driver 2.8.0
org.springframework.data spring-data-commons-core 1.2.1.RELEASE
|
由于这里面的某些依赖可能maven中央仓库没有,所以请在pom里添加下面两个spring的仓库:
1 2 3 4 5 6 7 8 9
| spring-maven-release Spring Maven Release Repository http://maven.springframework.org/release
spring-maven-milestone Spring Maven Milestone Repository http://maven.springframework.org/milestone
|
下面进行我们的代码编写,首先我们需要一个简单的java POJO类:person.java用于存储人的信息,其有三个属性:id(和mongodb中的ObjectId对应),name-姓名,age-年龄。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| package com.toozhao.mongo.bean;
import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document;
@Document public class Person {
@Id private String id; private String name; private int age;
public Person() {
}
public Person(String name, int age) { this.name = name; this.age = age; }
public String getId() { return id; }
public String getName() { return name; }
public void setId(String id) { this.id = id; }
public void setName(String name) { this.name = name; }
public void setAge(int age) { this.age = age; }
public int getAge() { return age; }
@Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; }
}
|
然后我们定义一个执行操作的接口,和其实现类,这里可以看做是一个dao模式。在接口中我们只定义了保存对象和查询一条记录两个方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package com.toozhao.mongo.repository;
import com.toozhao.mongo.bean.Person;
public interface MongoAction {
public void saveObject(Person objToSave);
public Person findObject(String id);
}
|
实现类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| package com.toozhao.mongo.repository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Repository;
import com.toozhao.mongo.bean.Person;
@Repository public class PersonActionImp implements MongoAction {
@Autowired MongoOperations operation;
public void saveObject(Person objToSave) { operation.insert(objToSave);
}
public Person findObject(String id) { return operation.findOne(new Query(Criteria.where("_id").is(id)), Person.class);
}
}
|
@repository,和@autowired是spring框架中的,主要功能是起到类似反射的作用吧,具体我还没弄得很清楚。
写一个有main方法的java类,对功能进行简单测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| package com.toozhao.mongo;
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.toozhao.mongo.bean.Person; import com.toozhao.mongo.repository.MongoAction;
public class MainTest {
private static final Log log = LogFactory.getLog(MainTest.class);
public static void main(String[] args) {
log.info("initial -----------------"); ConfigurableApplicationContext context = null; context = new ClassPathXmlApplicationContext( "META-INF/spring/applicationContext.xml"); MongoAction action = context.getBean(MongoAction.class); Person person = new Person("Tom", 11);
action.saveObject(person); log.info("结果为:" + action.findObject(person.getId()));
}
}
|
最后,贴出applicationContext文档,里面主要对mongodb进行了简单的配置,和设置了repository的扫描目录(和@repository对应)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
|
当然你还需要做的就是运行这个项目,我们需要在pom.xml里面添加如下代码,为你需要运行的类:
1 2 3 4 5 6 7 8
| org.codehaus.mojo exec-maven-plugin 1.1.1
com.toozhao.mongo.MainTest
|
最后,使用 mvn exec:java 就可以运行代码了,当然你在有main方法那个类,右键以java程序的方式也可以运行。结果就是你应该可以看到程序像数据库junv.person中插入了一条数据。