`
sunxboy
  • 浏览: 2868940 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring Data Mongo 自定义annoation

 
阅读更多

先show一下用法 

    @CreatedDate
    private DateTime createdDate;
    @LastModifiedDate
    private DateTime lastModifiedDate;

    @DBRef
    @CascadeSave
    private AlarmDetails alarmDetails;

 

1。 先自定@CascadeSave annoation

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface CascadeSave {

}

 

2。再定义listener

import java.lang.reflect.Field;

import javax.inject.Inject;

import org.springframework.data.annotation.Id;
import org.springframework.data.mapping.model.MappingException;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
import org.springframework.util.ReflectionUtils;

@SuppressWarnings("rawtypes")
public class CascadingMongoEventListener extends AbstractMongoEventListener {
    @Inject
    private MongoOperations mongoOperations;

    @Override
    public void onBeforeConvert(final Object source) {
        ReflectionUtils.doWithFields(source.getClass(), new ReflectionUtils.FieldCallback() {

            public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
                ReflectionUtils.makeAccessible(field);

                if (field.isAnnotationPresent(DBRef.class) && field.isAnnotationPresent(CascadeSave.class)) {
                    final Object fieldValue = field.get(source);
                    if (fieldValue == null) {
                        return;
                    }

                    DbRefFieldCallback callback = new DbRefFieldCallback();
                    ReflectionUtils.doWithFields(fieldValue.getClass(), callback);
                    if (!callback.isIdFound()) {
                        throw new MappingException("Cannot perform cascade save on child object without id set");
                    }

                    mongoOperations.save(fieldValue);
                }
            }
        });
    }

    private static class DbRefFieldCallback implements ReflectionUtils.FieldCallback {
        private boolean idFound;

        public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
            ReflectionUtils.makeAccessible(field);

            if (field.isAnnotationPresent(Id.class)) {
                idFound = true;
            }
        }

        public boolean isIdFound() {
            return idFound;
        }
    }
}

 

3。别忘了配置

    <mongo:auditing/>
    <mongo:mongo host="${db.mongo.host}" port="${db.mongo.port}" />
    <mongo:db-factory dbname="${db.mongo.name}" mongo-ref="mongo"/>
    <bean class="com.eifesun.monitor.web.model.mongodb.CascadingMongoEventListener" />

 

 

 

分享到:
评论

相关推荐

    Spring Data MongoDB API(Spring Data MongoDB 开发文档).CHM

    Spring Data MongoDB API。 Spring Data MongoDB 开发文档。

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

    通过定义接口并继承Spring Data提供的MongoRepository或SimpleMongoRepository,开发人员可以自动获得基本的查询方法。例如,我们可以创建一个UserRepository接口,包含如下的方法: ```java public interface ...

    Spring Data MongoDB中文文档

    - **MongoTemplate** 是 **Spring Data MongoDB** 提供的一个核心类,用于执行 MongoDB 的 CRUD 操作。 - 它提供了很多方便的方法来执行数据库操作,例如:`insert()`, `save()`, `findOne()`, `remove()`, `find()`...

    spring-mongo-data

    标题“spring-mongo-data”指的是Spring Data MongoDB项目,这是一个Java框架,用于简化与MongoDB数据库的交互。Spring Data是Spring框架的一部分,它提供了一种声明式的方法来处理各种数据存储,包括关系型数据库和...

    spring_mongo项目示例

    总的来说,`spring_mongo`项目示例展示了如何利用Spring Data MongoDB将MongoDB数据库集成到Spring Boot应用中,实现高效的数据操作。这个示例涵盖了从配置数据库到创建RESTful API的完整流程,是学习和实践Spring与...

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    &lt;bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean"&gt; ``` 一旦有了`MongoDBTemplate`,你就可以开始执行各种数据库操作了。比如,你可以使用`save()`方法保存一个对象到...

    spring-data-mongo配置成功

    《Spring Data MongoDB 配置详解》 在Java开发中,Spring框架因其强大的功能和灵活性而备受推崇,而在处理NoSQL数据库如MongoDB时,Spring Data MongoDB提供了便捷的接口和抽象,使得开发者能更加专注于业务逻辑,...

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

    本文将详细讲解如何在Spring Data MongoDB中实现自定义级联的方法。 首先,我们需要理解Spring Data MongoDB的核心组件MongoTemplate,它是用于执行MongoDB数据库操作的工具类。MongoTemplate提供了基本的CRUD操作...

    spring集成mongo所需jar

    综上所述,"spring集成mongo所需jar"涉及的关键知识点包括Spring Data MongoDB框架、MongoDB Java驱动、项目构建工具(如Maven或Gradle)的依赖管理以及MongoDB的集成配置和操作。通过正确引入这些jar文件并按照上述...

    jastar-wang-demo-springdata-mongo-master.zip

    此外,还可以自定义方法,Spring Data会自动将其转换为相应的MongoDB查询。 3. **配置与数据源**:在Spring Boot项目中,通常在`application.properties`或`application.yml`中配置MongoDB连接信息。例如,设置`...

    spring-data集成mongodb大数据量分页+自增id实现+MongodbPlugin集成

    skip随着数据量上去,分页性能极具下降,不推荐。这里使用spring-data-mongo实现的分页,并且实现了mongodb自增id(监听器方式)、也集成了轻量级插件MongodbPlugin,有需要的可以下载看看哦~

    springdata mongodb api文档

    对于那些希望了解如何使用SpringData MongoDB的开发人员来说,文档还提供了参考资料和入门指南,从如何安装和配置MongoDB到如何使用MongoTemplate以及创建自定义Repository实现等不同层次的内容都有涉及。...

    Spring-data-mongo应用

    ### Spring-data-mongo应用知识点详解 #### 一、Spring Data MongoDB 概述 Spring Data MongoDB 是 Spring Data 项目的一部分,它提供了一套统一的数据访问抽象层,使得开发人员能够更加容易地进行数据库操作,而...

    Spring-Data-MongoDB3.2

    - 实现Repository接口:创建自定义的Repository接口,继承Spring Data MongoDB提供的基类,并定义所需的查询方法。 **5. 使用示例** 例如,定义一个UserRepository接口: ```java public interface ...

    最新spring-data-mongo

    在Spring Data MongoDB中,开发者可以定义自定义的`Repository`接口,继承自`MongoRepository`或`CrudRepository`,并添加特定的方法来操作MongoDB数据。例如: - `findAll()`:获取所有文档。 - `findById()`:...

    尚硅谷SpringData视频观看下载链接

    SpringData是Spring框架的一个重要模块,它为Java开发者提供了丰富的数据访问抽象,简化了与各种数据存储系统的交互。本资源“尚硅谷SpringData视频”旨在帮助学习者深入理解和掌握SpringData的相关知识,通过视频...

    SpringData入门到精通

    SpringData是Spring框架的一个重要模块,它为Java开发者提供了与数据存储进行交互的简便方法,涵盖了关系型数据库、NoSQL数据库、搜索引擎等多种数据访问技术。本教程“SpringData入门到精通”将引领你逐步深入...

    springboot整合mongo自定义Converter 实现字符串和Date类型互转 并且查询陈宫

    使用自定义了时间和字符串的转换规则 存的时候 存字符串 读取的时候 转换为日期类型 但是在按时间查找的时候 也可以使用 下载后 直接运行 Test类 修改下MongodbConfiguration的mongoUrl 写的时候将时间转为字符串 ...

    spring-data-mongo-1.0.0.M5.zip

    spring-data-mongo-1.0.0.M5.zip 11年10月25号出来的 要配合spring-data-commons-1.2.0.M2.zip使用 不然底层会报错 spring-data-commons-1.2.0.M2.zip我已经传上去了~

    spring-mongo-1.4

    Spring Data MongoDB通过MongoTemplate和MongoConverter来实现对象与MongoDB文档之间的映射。MongoTemplate是操作MongoDB的主要接口,而MongoConverter则负责将Java对象转换为MongoDB文档,反之亦然。在1.4版本中,...

Global site tag (gtag.js) - Google Analytics