here is the example:
1. model
package com.eifesun.monitor.web.model; import java.io.Serializable; import java.util.concurrent.TimeUnit; import org.joda.time.DateTime; import org.joda.time.LocalDate; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.mapping.Document; import com.eifesun.monitor.DeviceType; import com.eifesun.monitor.inverter.power_20k.ErrorCode; @Document(collection = "alarm_logs") public class AlarmLogs implements Serializable { private static final long serialVersionUID = 1L; @Id private long id; @Indexed private long alarmDate; private String deviceType; private String clientId; private String errorType; private int errorValue; private long startDate; private long cleanDate; @Transient private final String dateParten = "MM/dd/yyyy h:mm"; @Transient private String name; public AlarmLogs() { } public AlarmLogs(DeviceType deviceType, String clientId, String errorType, int errorValue) { this.deviceType = deviceType.toValue(); this.clientId = clientId; this.errorType = errorType; this.errorValue = errorValue; this.startDate = DateTime.now().getMillis(); this.alarmDate = new LocalDate().toDateTimeAtStartOfDay().getMillis(); } public String getStartDate() { return new DateTime(startDate).toString(dateParten); } public void setStartDate(long startDate) { this.startDate = startDate; } public boolean getAlarmIsCleaned() { return this.cleanDate != 0; } /** * get alarm remain period time (unit: minute) * * @return */ public long getAlarmRemainedTime() { if (getAlarmIsCleaned()) { return TimeUnit.MILLISECONDS.toMinutes(cleanDate - startDate); } else { return TimeUnit.MILLISECONDS.toMinutes(DateTime.now().getMillis() - startDate); } } public void setCleanDate(long cleanDate) { this.cleanDate = cleanDate; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public void setAlarmDate(DateTime alarmDate) { this.alarmDate = alarmDate.getMillis(); } public String getDeviceType() { return deviceType; } public void setDeviceType(String deviceType) { this.deviceType = deviceType; } public String getErrorMessage() { return ErrorCode.getType(errorType).getDescription(errorValue); } public String getErrorType() { return errorType; } public int getErrorValue() { return errorValue; } public String getClientId() { return clientId; } public void setClientId(String clientId) { this.clientId = clientId; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2.db Repository
package com.eifesun.monitor.web.repository; import static org.springframework.data.domain.Sort.Direction.DESC; import static org.springframework.data.mongodb.core.query.Criteria.where; import static org.springframework.data.mongodb.core.query.Query.query; import java.util.List; import org.joda.time.DateTime; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Repository; import com.eifesun.monitor.web.model.AlarmLogs; @Repository public class AlarmLogsRepositoryImpl extends SequenceRepostory implements AlarmLogsRepository { public void setMongo(MongoTemplate mongo) { this.mongo = mongo; } @Override public List<AlarmLogs> findAlarmLogs(DateTime date, int lastId) { //@formatter:off final List<AlarmLogs> alarmlogs = mongo.find( query(where("startDate").gte(date.getMillis()). and("_id").gt(lastId)). with(new Sort(DESC, "_id")). limit(100), AlarmLogs.class); //@formatter:on return alarmlogs; } @Override public void save(AlarmLogs logs) { logs.setId(getNextSequence("alarm_logs")); mongo.save(logs); } }
abstract repostroy for sequence fetch
@Repository public abstract class SequenceRepostory { @Autowired protected MongoTemplate mongo; public abstract void setMongo(MongoTemplate mongo); public long getNextSequence(String collectionName) { final Counter counter = mongo.findAndModify(query(where("_id").is(collectionName)), new Update().inc("seq", 1), options().returnNew(true), Counter.class); return counter.getSeq(); } }
3. repostory unit test
package com.eifesun.mornitor.server; import static com.lordofthejars.nosqlunit.mongodb.MongoDbRule.MongoDbRuleBuilder.newMongoDbRule; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import java.util.List; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.data.mongodb.config.AbstractMongoConfiguration; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.eifesun.monitor.web.command.AlarmQueryType; import com.eifesun.monitor.web.model.AlarmLogs; import com.eifesun.monitor.web.repository.AlarmLogsRepositoryImpl; import com.foursquare.fongo.Fongo; import com.lordofthejars.nosqlunit.annotation.UsingDataSet; import com.lordofthejars.nosqlunit.core.LoadStrategyEnum; import com.lordofthejars.nosqlunit.mongodb.MongoDbRule; import com.mongodb.Mongo; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class AlarmLogsRepositoryTest { @Autowired private ApplicationContext applicationContext; @Autowired private AlarmLogsRepositoryImpl alarmRepo; @Rule public MongoDbRule mongoDbRule = newMongoDbRule().defaultSpringMongoDb("mongodb-test"); @Test @UsingDataSet(locations = {"testFindAlarmLogs.json"}, loadStrategy = LoadStrategyEnum.CLEAN_INSERT) public void testFindAlarmLogs() { List<AlarmLogs> list = alarmRepo.findAlarmLogs(AlarmQueryType.AUTO.getAlarmDate(), 0); assertThat(list.size(), equalTo(4)); } @Configuration @EnableMongoRepositories @ComponentScan(basePackageClasses = {AlarmLogsRepositoryImpl.class}) @PropertySource("classpath:application.properties") static class RepositoryTestConfiguration extends AbstractMongoConfiguration { @Override protected String getDatabaseName() { return "mongodb-test"; } @Override public Mongo mongo() { return new Fongo("mongo-test").getMongo(); } @Override protected String getMappingBasePackage() { return "com.eifesun.monitor.web.model"; } } }
enjoy it.
相关推荐
MongoDBTemplate mongoTemplate = new MongoDBTemplate(mongoDbFactory); ``` 在`applicationContext.xml`或类似的配置文件中,你会设置MongoDB的相关连接信息,如服务器地址、端口、数据库名和认证信息等。例如: ...
- **MongoTemplate**:作为Spring Data MongoDB的核心类,提供了丰富的操作MongoDB的方法。 - **文档操作**:涵盖了保存、更新、删除文档等操作。 - **查询文档**:包括查询集合中的文档、地理空间查询、全文查询等...
但是,在使用 spring-data-mongodb-1.9.5.RELEASE 版本时,我们可能会遇到一些问题,例如在调用 mongoTemplate 类型的 aggregate 聚合框架时,需要提供 'cursor' 选项,否则将抛出异常。为了避免这些问题,我们可以...
其中,`MongoTemplate`是Spring Data MongoDB的核心组件,它提供了一种模板方法模式,用于执行各种MongoDB操作。 首先,我们需要在`pom.xml`文件中添加Spring Boot MongoDB的依赖: ```xml <groupId>org.spring...
前言前面讲解了如何在springboot中集成mongodb,本文将讲解mongodb命令操作及其MongoTemplate的使用。穿插的目的在于不用先去寻找m
对于那些希望了解如何使用SpringData MongoDB的开发人员来说,文档还提供了参考资料和入门指南,从如何安装和配置MongoDB到如何使用MongoTemplate以及创建自定义Repository实现等不同层次的内容都有涉及。...
MongoTemplate是Spring Data MongoDB框架中的一个核心组件,用于在Java应用中方便地操作MongoDB数据库。这个资源包“mongoTemplate工具类Dao层方法封装.zip”显然提供了两种版本的MongoTemplate操作集合的代码示例,...
mongoDB客户端工具MongoVUE 1.5.3破解 破解方法见"破解方法.txt
具体来说,Spring会通过XML配置文件或者Java配置来定义MongoDB的数据源,创建MongoTemplate或者MongoRepository接口的实现,然后通过@Autowired注解注入到Struts的Action类中。在Action中,通过调用这些接口的方法...
这通常涉及到`MongoTemplate`或`MongoRepository`的使用。 6. **配置**:在Spring Boot应用中,需要在配置文件(如`application.properties`或`application.yml`)中设置MongoDB的相关参数,包括连接URL、数据库名...
Spring Data MongoDB API。 Spring Data MongoDB 开发文档。
在IT行业中,Spring框架是Java开发中的重要工具,而MongoDB则是一种流行的NoSQL数据库,以其灵活性和高性能著称。本文将深入探讨如何整合Spring框架与MongoDB,以实现高效的数据存储和检索。 首先,Spring Data ...
1. `MongoTemplate`:这是Spring Data MongoDB的主要操作接口,用于执行CRUD(Create, Read, Update, Delete)操作和其他数据库交互。 2. `MongoDbFactory`:创建MongoDB连接工厂,管理数据库连接。 3. `Mongo...
- **MongoTemplate** 是 **Spring Data MongoDB** 提供的一个核心类,用于执行 MongoDB 的 CRUD 操作。 - 它提供了很多方便的方法来执行数据库操作,例如:`insert()`, `save()`, `findOne()`, `remove()`, `find()`...
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongo" ref="mongo" /> ``` **配置项说明**: - `<mongo:mongo>`:定义MongoDB客户端对象...
### MongoDB 批量插入及更新知识点详解 #### 一、MongoDB简介 MongoDB是一款开源的NoSQL数据库系统,以其高性能、高可用性和易用性而受到广泛欢迎。它使用JSON-like文档(即BSON格式)来存储数据,并且支持动态模式...
Spring Data MongoDB 2.1中的新特性 5.2。Spring Data MongoDB 2.0中的新特性 5.3。Spring Data MongoDB 1.10中的新特性 5.4。Spring Data MongoDB 1.9中的新特性 5.5。Spring Data MongoDB 1.8中的新特性 5.6。...
- 创建MongoDB模板:利用Spring Data MongoDB的`MongoTemplate`,方便地执行CRUD操作。 3. **文件上传与下载**: - 文件上传:通过Spring MVC控制器接收文件,利用MongoDB的GridFS API将文件保存到数据库,并将元...
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongo" /> ``` 现在,我们可以定义领域对象,这些对象将映射到MongoDB的文档。例如,假设我们...
在本文中,我们将深入探讨如何在Spring Boot应用中整合MongoDB的Change Stream功能。Change Stream是MongoDB提供的一种强大特性,允许我们实时监控数据库中的变化,例如文档的插入、更新和删除操作。这对于构建实时...