博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义注解
阅读量:5281 次
发布时间:2019-06-14

本文共 3464 字,大约阅读时间需要 11 分钟。

参考待整理:https://www.cnblogs.com/yzykkpl/p/10356258.html

 

 

annotation注解:

import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 自定义注解,实现主键自增 * @author sea * */@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface AutoIncKey {}

 

AutoIncKeyEventListener 注解监听器:

package com.sea.test.annotation;import java.lang.reflect.Field;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.FindAndModifyOptions;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent;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.stereotype.Component;import org.springframework.util.ReflectionUtils;/** * 监听器用于监听MongoEvent * ,该类继承AbstractMongoEventListener类,因为我们需要在JAVA对象转换成数据库对象的时候操作id字段实现id自增, * 所以覆盖onBeforeConvert方法(详见spring-data文档,https://docs.spring.io/spring-data/data-document/docs/current/reference/html/,5.11节) * @author sea * */@Componentpublic class AutoIncKeyEventListener extends AbstractMongoEventListener{      private static final Logger logger= LoggerFactory.getLogger(AutoIncKeyEventListener.class);      @Autowired      private MongoTemplate mongoTemplate;                  @Override      public void onBeforeConvert(BeforeConvertEvent event) {          logger.info(event.getSource().toString());          Object source = event.getSource();          if (source != null) {              ReflectionUtils.doWithFields(source.getClass(), new ReflectionUtils.FieldCallback() {                  public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {                      ReflectionUtils.makeAccessible(field);                      // 如果字段添加了我们自定义的AutoIncKey注解                      if (field.isAnnotationPresent(AutoIncKey.class))                       {                          // 设置自增ID                          Object value = field.get(source);                         //获取之前id的值,如果主键不为空,主键加1                          if(value==null)                          {                              field.set(source, getNextId(source.getClass().getSimpleName()));                          }                      }                  }              });          }        }              private Long getNextId(String collName) {          Query query = new Query(Criteria.where("collName").is(collName));          Update update = new Update();          update.inc("seqId", 1);          FindAndModifyOptions options = new FindAndModifyOptions();          options.upsert(true);          options.returnNew(true);          SeqInfo seq = mongoTemplate.findAndModify(query, update, options, SeqInfo.class);          return seq.getSeqId();      }            }

 

 

序列id  

SeqInfo
import java.io.Serializable;public class SeqInfo implements Serializable {        private static final long serialVersionUID = 1L;    private  Long  seqId;    public Long getSeqId() {        return seqId;    }    public void setSeqId(Long seqId) {        this.seqId = seqId;    }    }

 

转载于:https://www.cnblogs.com/lshan/p/10986076.html

你可能感兴趣的文章
使用XML传递数据
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>