您的位置:首页 > 数据库 > Mongodb

spring-data-mongodb的MongoTemplate 使用小例子

2012-08-27 20:18 801 查看
转载自:http://xiaofancn.iteye.com/blog/1163200

1、首先使用Eclipse的git插件把spring提供的示例下载下来

 
https://github.com/SpringSource/spring-data-document-examples.git
 

下载之后导入maven工程





 

 

2、首先看我们的domain定义,也就是entity。

org.springframework.data.mongodb.examples.hello.domain.Person
package org.springframework.data.mongodb.examples.hello.domain;

import java.util.ArrayList;
import java.util.List;

import org.springframework.data.annotation.Id;
import org.springframework.data.document.mongodb.mapping.Document;

@Document
public class Person {

@Id
private String id;

private String name;

private int age;

private List<Account> accounts = new ArrayList<Account>();

public Person() {
}

public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}

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 int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public List<Account> getAccounts() {
return accounts;
}

public void addAccount(Account account) {
this.accounts.add(account);
}

public void setAccounts(List<Account> accounts) {
this.accounts = accounts;
}

public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age
+ ", accounts=" + accounts + "]";
}

}

dao层的类org.springframework.data.mongodb.examples.hello.HelloMongo
package org.springframework.data.mongodb.examples.hello;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Random;
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.data.mongodb.core.query.Update;
import org.springframework.data.mongodb.examples.hello.domain.Account;
import org.springframework.data.mongodb.examples.hello.domain.Person;
import org.springframework.stereotype.Repository;

import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;
/**
*
* @author xiaofancn
*
* 参考 http://static.springsource.org/spring-data/data-document/docs/1.0.0.M2/reference/html/ * 参考 http://nosql.mypopescu.com/post/816470307/tutorial-mongodb-in-java *
*/
@Repository
public class HelloMongo {

@Autowired
MongoOperations mongoOperations;

public void gridFSInput(String inputFilepath) {
DB db = mongoOperations.getCollection(
mongoOperations.getCollectionName(Person.class)).getDB();
db.requestStart();
File inputFile = new File(inputFilepath);
GridFSInputFile gfsInput;
try {
gfsInput = new GridFS(db, "fs")
.createFile(inputFile);
gfsInput.setFilename("qq123456789logo");// 保存到数据库的文件名为qq123456789logo
gfsInput.save();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

db.requestDone();

}

public void gridFSOutput(String outputFilepath) {
DB db = mongoOperations.getCollection(
mongoOperations.getCollectionName(Person.class)).getDB();

GridFSDBFile gfsFile = new GridFS(db, "fs").findOne("qq123456789logo");// 查找文件名qq123456789logo输出保存
try {
gfsFile.writeTo(outputFilepath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void insert(int count) {

if (mongoOperations.collectionExists(Person.class)) {
mongoOperations.dropCollection(Person.class);
}

mongoOperations.createCollection(Person.class);

for (int i = 0; i < count; i++) {
Person p = new Person("小樊", i);
Account a = new Account("1234-59873-893-1", Account.Type.SAVINGS,
123.45D);
p.addAccount(a);
mongoOperations.insert(p);
}

}

public void delete(int age) {
// 删除查询到的年龄
mongoOperations.remove(new Query(new Criteria("age").is(age)),
Person.class);

}

public void alert(int age) {
// 根据age查询,更新查询到的age字段为随机数
mongoOperations.updateMulti(new Query(new Criteria("age").is(age)),
new Update().inc("age", new Random().nextInt()), Person.class);
}

public void alert(String name) {
// 根据name查询,更新查询到的name字段为xiaofancn
mongoOperations.updateMulti(new Query(new Criteria("name").in(name)),
new Update().set("name", "xiaofancn"), Person.class);

}

public void query(int age) {
// 根据age查询
List<Person> persons = mongoOperations.find(new Query(new Criteria(
"age").is(age)), Person.class);
for (Person p : persons) {
System.out.println(p.toString());
}

// ===========================jdbc原生的类
DBCollection personColl = mongoOperations.getCollection(mongoOperations
.getCollectionName(Person.class));
BasicDBObject parameter = new BasicDBObject();
parameter.put("age", age);
DBCursor item = personColl.find(parameter);
while (item.hasNext()) {
System.out.println(item.next());
}

}

/**
* 统计这个年龄的人数
* @param age
* @return
*/
public Long count(int age) {
DBCollection personColl = mongoOperations.getCollection(mongoOperations
.getCollectionName(Person.class));
BasicDBObject parameter = new BasicDBObject();
parameter.put("age", age);
return personColl.count(parameter);

}

public void showAllOrederByAge(int startPage, DBObject sort,
int countPerPage) {
if (sort == null) {// 默认按照年龄的升序
sort = BasicDBObjectBuilder.start().add("age", 1).get();
}

DBCollection personColl = mongoOperations.getCollection(mongoOperations
.getCollectionName(Person.class));
DBCursor item = personColl.find().sort(sort)
.skip((startPage-1) * countPerPage).limit(countPerPage);

while (item.hasNext()) {
// Person p = item.next();错误
DBObject parameter = item.next();
System.out.println(parameter);
}
}

public void showAll() {
List<Person> list = mongoOperations.findAll(Person.class);
for (Person p : list) {
System.out.println(p);
}
// =================大批量的查询尽量使用原生的函数,也要对应原生的文档结构。
DBObject sort = BasicDBObjectBuilder.start().add("age", -1).get();

DBCollection personColl = mongoOperations.getCollection(mongoOperations
.getCollectionName(Person.class));
DBCursor item = personColl.find();// 查询前100条记录

while (item.hasNext()) {
// Person p = item.next();错误
DBObject parameter = item.next();
System.out.println(parameter);
}
}
}

// 参考 http://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations // 对数组对象有效,数组对象后添加数据
mongoOperations.updateMulti(new Query(new Criteria("age").is(0)),
new Update().push("name", "小樊"), Person.class);
//找到数据,加法属性 age = age +-10
mongoOperations
.updateMulti(new Query(new Criteria("age").is(0)), new Update().inc("age", -10), Person.class);
//unset 重置属性值,数字为0,字符其他为null
mongoOperations.updateMulti(new Query(new Criteria("age").is(0)),
new Update().set("name", "小樊").set("age", -1), Person.class);

客户端org.springframework.data.mongodb.examples.hello.App
package org.springframework.data.mongodb.examples.hello;

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

/**
* Hello Mongo!
*/
public class App {
public static void main(String[] args) {
System.out.println("Bootstrapping HelloMongo");

ConfigurableApplicationContext context = null;
// use @Configuration using Java:
context = new ClassPathXmlApplicationContext(
"META-INF/spring/bootstrap.xml");

// use XML application context:
// context = new
// ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");

HelloMongo hello = context.getBean(HelloMongo.class);

hello.delete(39);
hello.query(39);

//hello.showAll();
System.out.println("DONE!");
}
}


参考
http://static.springsource.org/spring-data/data-document/docs/1.0.0.M2/reference/html/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息