- 浏览: 330916 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
di1984HIT:
谢谢,写的不错。
使用hector操作Cassandra -
mr_von:
非常感谢!
paoding的分词使用 -
howgoo:
http://www.dhtmlx.com/docs/prod ...
dhtmlxGrid分页与排序 -
青春的、脚步:
谢谢
spring-data-mongodb的MongoTemplate 使用小例子 -
青春的、脚步:
<div class="quote_title ...
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/
评论
6 楼
青春的、脚步
2012-11-23
谢谢
5 楼
青春的、脚步
2012-11-23
xiaofancn 写道
青春的、脚步 写道
这个能查询都个值在某个范围内的数据吗
比如年龄 20 到 70 的
貌似没有啊
楼主用过吗 这样的情况
比如年龄 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 的
貌似没有啊
楼主用过吗 这样的情况
比如年龄 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 的
貌似没有啊
楼主用过吗 这样的情况
比如年龄 20 到 70 的
貌似没有啊
楼主用过吗 这样的情况
2 楼
violetluna
2011-12-31
不错,谢谢了
1 楼
miller_cn
2011-10-11
很好的例子 谢谢
发表评论
-
spring cloud gateway 全局过滤器。
2019-03-17 23:11 527spring cloud gateway 网关 ... -
elasticsearch 5.4搜索
2017-05-19 08:37 148@Test public void t ... -
netty简单的操作memcached
2017-04-19 18:59 976pom文件 <dependency> ... -
juc系列-Executor框架
2017-03-20 13:34 699转自 juc系列-Executor框架 什 ... -
ReentrantLock 类
2017-03-19 21:11 11.1 什么是reentrantlock java.u ... -
juc之CountDownLatch、CyclicBarrier和Semaphore例子
2017-03-19 17:23 833import java.util.concurren ... -
netty客户端与服务端例子
2017-03-12 20:07 2799package com.snailteam.nett ... -
freemaker集成spring
2017-02-26 19:00 567<bean id="freeMark ... -
spring集成Hessian插件配置改成自动注入。
2017-02-10 15:39 834原来的配置 <bean name="/ ... -
web开发模版
2017-02-09 14:42 0# Rules reminder: # DEBUG &l ... -
Java多线程
2017-02-04 14:39 515线程状态图 新建状态(New): ... -
hash冲突解决
2017-01-23 18:30 4531、开放地址法有一个公式: m是hash表长度,di ... -
spring事务与锁汇总。
2017-01-22 17:58 3822spring事务传播 ... -
druid 表重写
2016-05-18 12:54 2469import com.alibaba.druid.sql. ... -
mybatis +spring 分库
2015-04-30 17:56 353<context:component-scan b ... -
Java并发任务处理例子
2014-02-12 16:06 1125public void init() { su ... -
JAVA动态代理模式
2012-10-03 01:01 1183这是我要实现的效果 public static ... -
paoding的分词使用
2012-06-13 21:30 4865paoding下载 http://code.googl ... -
使用spring-hadoop操作hadoop
2012-05-20 02:12 32参考文章 http://blog.springsource. ... -
solr3.5集成paoding和位置搜索及对solrj的使用。
2012-04-28 02:12 1978http://xiaofancn.iteye.com/blog ...
相关推荐
在MongoDB的例子中,Spring Data提供了一套统一的API,使得开发者可以使用Java语言进行MongoDB的操作,而无需直接接触MongoDB的原生驱动。 首先,让我们深入了解Spring Data MongoDB的核心概念: 1. **Mongo...
在应用中,我们可以通过@Autowired注解来注入MongoDB的操作接口MongoOperations,通常我们会直接使用MongoTemplate: ```java @Autowired private MongoTemplate mongoTemplate; ``` MongoTemplate提供了丰富的API...
1. **MongoTemplate**:这是Spring Data MongoDB提供的核心模板类,用于执行MongoDB的各种操作,如查询、更新、插入等。MongoTemplate提供了对数据库操作的抽象,使得开发者可以不直接操作MongoDB的Java驱动程序。 ...
Spring Data MongoDB提供了与MongoDB数据库的集成,允许开发者使用Java对象直接映射到MongoDB文档。它包含MongoTemplate类,用于执行各种数据库操作,以及Repository接口,提供了一种声明式的方式来处理数据。 3. *...
下面我们将详细讨论如何在 Spring Boot 中集成 MongoDB,并通过使用 `MongoTemplate` 进行数据的增删改查操作。 **1. 添加依赖** 首先,我们需要在项目中添加 MongoDB 和 Spring Data MongoDB 的依赖。如果你使用...
使用Spring Data MongoDB的ChangeStream Spring Data MongoDB提供了`ChangeStreamIterable`接口,我们可以利用它来监听数据库的变化。下面是一个示例,展示了如何创建一个Change Stream并处理变更事件: ```java @...
在Spring Boot中,我们可以利用`org.springframework.data.mongodb.core.MongoTemplate`或`org.springframework.data.mongodb.repository.ReactiveMongoRepository`与MongoDB交互。对于聚合操作,我们需要使用`Mongo...
这个例子展示了如何使用Spring Data MongoDB简化对MongoDB的操作,以及如何在Spring MVC中构建RESTful API。在实际开发中,你可能还需要考虑错误处理、数据验证、分页、排序等复杂功能,但这个基础的例子为你提供了...
此外,SpringData MongoDB还支持Repository接口,允许通过继承`MongoRepository`来定义更高级别的查询方法。例如: ```java public interface UserRepository extends MongoRepository, String> { List<User> ...
import org.springframework.data.mongodb.core.MongoTemplate; // 假设WaterqualityMonthly是你的数据模型类,commonBo是MongoTemplate实例 private Map, List<?>> sectionInfo(Date first, Date last) { ...
在 Spring Data MongoDB 中,可以使用 BulkOperations 来实现批量操作,这篇文章主要介绍了 Spring Data MongoDB 批量操作的方法。 BulkOperations 介绍 BulkOperations 是 Spring Data MongoDB 中的一种批量操作...
这个例子提供了一个快速上手SpringBoot与MongoDB集成的途径,你可以直接下载并运行,以便于理解和学习如何在实际项目中使用mongoTemplate进行数据操作。通过这种方式,你可以更深入地理解SpringBoot的自动化配置、...
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> ... ``` - `context:property-placeholder`...
这里,我们使用了JSON格式的查询语句,Spring Data会将其转换为MongoDB的查询命令。 此外,项目中的API可能包含了对数据的分页、排序以及自定义转换等功能。分页可以通过Pageable接口实现,而排序则可以使用Sort...
1. **MongoTemplate**: 这是Spring Data MongoDB的主要工作马车,它封装了与MongoDB的交互。MongoTemplate提供了保存、更新、删除文档,以及执行聚合和查询的方法。例如,你可以使用`insert()`或`save()`方法来插入...
MongoTemplate 是 Spring Data for MongoDB 提供的一个关键工具,它是一个帮助类,用于执行通用的 MongoDB 操作。MongoTemplate 负责文档与 Java 对象(POJO)之间的映射,并且会把数据库访问的异常转换成 Spring 的...
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongo" ref="mongo" /> <constructor-arg name="databaseName" value="myDatabase" /> ``` 有...
Spring 和 MongoDB 是两个在现代Java开发中非常重要的技术。...在`springmvc_mongodb`这个项目中,你可能找到了关于如何在Spring MVC环境中配置和使用MongoDB的例子,这将有助于深入理解两者之间的整合。
首先,我们需要理解Spring Data MongoDB的核心组件MongoTemplate,它是用于执行MongoDB数据库操作的工具类。MongoTemplate提供了基本的CRUD操作,但它默认并不支持级联保存。在上述例子中,`@DBRef`注解用于标记一个...
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Component; @Component public class ArticleRepositoryImpl { private final MongoTemplate mongoTemplate...