`

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

阅读更多

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/

 

 

  • 大小: 41.4 KB
  • 大小: 29.4 KB
分享到:
评论
6 楼 青春的、脚步 2012-11-23  
谢谢













5 楼 青春的、脚步 2012-11-23  
xiaofancn 写道
青春的、脚步 写道
这个能查询都个值在某个范围内的数据吗

比如年龄  20  到 70 的 

貌似没有啊  

楼主用过吗  这样的情况

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%3C%2C%3C%3D%2C%3E%2C%3E%3D
http://static.springsource.org/spring-data/data-document/docs/1.0.0.M2/reference/html/#d0e1678

spring-data-mongodb里面的MongoOperations类,现在没大问题了
4 楼 xiaofancn 2012-11-22  
青春的、脚步 写道
这个能查询都个值在某个范围内的数据吗

比如年龄  20  到 70 的 

貌似没有啊  

楼主用过吗  这样的情况

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%3C%2C%3C%3D%2C%3E%2C%3E%3D
http://static.springsource.org/spring-data/data-document/docs/1.0.0.M2/reference/html/#d0e1678
3 楼 青春的、脚步 2012-11-22  
这个能查询都个值在某个范围内的数据吗

比如年龄  20  到 70 的 

貌似没有啊  

楼主用过吗  这样的情况
2 楼 violetluna 2011-12-31  
不错,谢谢了
1 楼 miller_cn 2011-10-11  
很好的例子  谢谢

相关推荐

    SpringSource-spring-data-document-examples-1.0.0.M4-MongoDB-Examples

    在MongoDB的例子中,Spring Data提供了一套统一的API,使得开发者可以使用Java语言进行MongoDB的操作,而无需直接接触MongoDB的原生驱动。 首先,让我们深入了解Spring Data MongoDB的核心概念: 1. **Mongo...

    springboot整合mongodb用MongoTemplate.rar

    在应用中,我们可以通过@Autowired注解来注入MongoDB的操作接口MongoOperations,通常我们会直接使用MongoTemplate: ```java @Autowired private MongoTemplate mongoTemplate; ``` MongoTemplate提供了丰富的API...

    Spring-Mongodb例子

    1. **MongoTemplate**:这是Spring Data MongoDB提供的核心模板类,用于执行MongoDB的各种操作,如查询、更新、插入等。MongoTemplate提供了对数据库操作的抽象,使得开发者可以不直接操作MongoDB的Java驱动程序。 ...

    Java_使用Spring Data为JPA MongoDB Neo4j Redis的例子.zip

    Spring Data MongoDB提供了与MongoDB数据库的集成,允许开发者使用Java对象直接映射到MongoDB文档。它包含MongoTemplate类,用于执行各种数据库操作,以及Repository接口,提供了一种声明式的方式来处理数据。 3. *...

    mongodb与springboot集成例子

    下面我们将详细讨论如何在 Spring Boot 中集成 MongoDB,并通过使用 `MongoTemplate` 进行数据的增删改查操作。 **1. 添加依赖** 首先,我们需要在项目中添加 MongoDB 和 Spring Data MongoDB 的依赖。如果你使用...

    springboot整合mongodb changestream代码

    使用Spring Data MongoDB的ChangeStream Spring Data MongoDB提供了`ChangeStreamIterable`接口,我们可以利用它来监听数据库的变化。下面是一个示例,展示了如何创建一个Change Stream并处理变更事件: ```java @...

    mongo spring boot Aggregate 例子

    在Spring Boot中,我们可以利用`org.springframework.data.mongodb.core.MongoTemplate`或`org.springframework.data.mongodb.repository.ReactiveMongoRepository`与MongoDB交互。对于聚合操作,我们需要使用`Mongo...

    spring mvc 集成mongoDB项目 例子

    这个例子展示了如何使用Spring Data MongoDB简化对MongoDB的操作,以及如何在Spring MVC中构建RESTful API。在实际开发中,你可能还需要考虑错误处理、数据验证、分页、排序等复杂功能,但这个基础的例子为你提供了...

    spring_mongodb.zip

    此外,SpringData MongoDB还支持Repository接口,允许通过继承`MongoRepository`来定义更高级别的查询方法。例如: ```java public interface UserRepository extends MongoRepository, String&gt; { List&lt;User&gt; ...

    spring data mongodb 聚合 管道

    import org.springframework.data.mongodb.core.MongoTemplate; // 假设WaterqualityMonthly是你的数据模型类,commonBo是MongoTemplate实例 private Map, List&lt;?&gt;&gt; sectionInfo(Date first, Date last) { ...

    Spring Data MongoDB 数据库批量操作的方法

    在 Spring Data MongoDB 中,可以使用 BulkOperations 来实现批量操作,这篇文章主要介绍了 Spring Data MongoDB 批量操作的方法。 BulkOperations 介绍 BulkOperations 是 Spring Data MongoDB 中的一种批量操作...

    MogoDB_demo.rar

    这个例子提供了一个快速上手SpringBoot与MongoDB集成的途径,你可以直接下载并运行,以便于理解和学习如何在实际项目中使用mongoTemplate进行数据操作。通过这种方式,你可以更深入地理解SpringBoot的自动化配置、...

    spring mongodb整合

    &lt;bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"&gt; &lt;constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/&gt; ... ``` - `context:property-placeholder`...

    基于spring data mongo封装的API,让开发人员不用知道mongo

    这里,我们使用了JSON格式的查询语句,Spring Data会将其转换为MongoDB的查询命令。 此外,项目中的API可能包含了对数据的分页、排序以及自定义转换等功能。分页可以通过Pageable接口实现,而排序则可以使用Sort...

    mongodb在java中小试牛刀

    1. **MongoTemplate**: 这是Spring Data MongoDB的主要工作马车,它封装了与MongoDB的交互。MongoTemplate提供了保存、更新、删除文档,以及执行聚合和查询的方法。例如,你可以使用`insert()`或`save()`方法来插入...

    使用Java基于MongoDB和SpringData应用.docx

    MongoTemplate 是 Spring Data for MongoDB 提供的一个关键工具,它是一个帮助类,用于执行通用的 MongoDB 操作。MongoTemplate 负责文档与 Java 对象(POJO)之间的映射,并且会把数据库访问的异常转换成 Spring 的...

    springMvc配置mongo数据库

    &lt;bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"&gt; &lt;constructor-arg name="mongo" ref="mongo" /&gt; &lt;constructor-arg name="databaseName" value="myDatabase" /&gt; ``` 有...

    spring +mongodb

    Spring 和 MongoDB 是两个在现代Java开发中非常重要的技术。...在`springmvc_mongodb`这个项目中,你可能找到了关于如何在Spring MVC环境中配置和使用MongoDB的例子,这将有助于深入理解两者之间的整合。

    Spring Data MongoDB中实现自定义级联的方法详解

    首先,我们需要理解Spring Data MongoDB的核心组件MongoTemplate,它是用于执行MongoDB数据库操作的工具类。MongoTemplate提供了基本的CRUD操作,但它默认并不支持级联保存。在上述例子中,`@DBRef`注解用于标记一个...

    利用Spring Boot操作MongoDB的方法教程

    import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Component; @Component public class ArticleRepositoryImpl { private final MongoTemplate mongoTemplate...

Global site tag (gtag.js) - Google Analytics