Springboot下Mongo數(shù)據(jù)庫(kù)寫(xiě)入時(shí)字段序號(hào)自增

記錄下方法以及踩過(guò)的坑象踊,本文主要參考了https://blog.csdn.net/qq_16313365/article/details/72781469#commentBox莺奔,在此致謝鸠珠!

(1)首先定義序列實(shí)體類:

@Document(collection ="sequence")

public class SeqInfo {

? ??????//getter and setter

????????@Id

? ? ? ? private String id;

? ? ? ? @Field("collection_name")

????????private String collName;

? ? ? ? @Field("seq_id")

????????private Long seqId;

}

(2)接著定義注解AutoIncKey

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

public @interface AutoIncKey {

}

(3)定義監(jiān)聽(tīng)類SaveEventListener

注意:這里面有個(gè)坑。按照https://blog.csdn.net/qq_16313365/article/details/72781469#commentBox中作者的方法以及評(píng)論中@yaoyaoyue的方法會(huì)出現(xiàn)問(wèn)題:在下文insert的時(shí)候返回的結(jié)果顯示字段值自增了锌介,但是到數(shù)據(jù)庫(kù)中一看卻是初始值0嗜诀,也就是并沒(méi)有寫(xiě)入數(shù)據(jù)庫(kù)AbstractMongoEventListener中的方法void onBeforeConvert(BeforeConvertEvent event)才成功。

@Component

public class SaveEventListener extends AbstractMongoEventListener {

private final MongoTemplatemongoTemplate;

? ? @Autowired

? ? public SaveEventListener(MongoTemplate mongoTemplate) {

????????this.mongoTemplate = mongoTemplate;

? ? }

@Override

? ? public void onBeforeConvert(BeforeConvertEvent<Object>?event){

????????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)) {

????????????????????????// 設(shè)置自增ID

? ? ? ? ? ? ? ? ? ? ? ? field.set(source, getNextId(source.getClass().getSimpleName()));

? ? ? ? ? ? ? ? ? ? }

????????????????}

????????????});

? ? ? ? }

}

/**

* Description:獲取下一個(gè)自增ID

*

? ? * @param collName 集合名(這里用類名)

? ? * @return 序列值

? ? * @author example@gmail.com

? ? * @Date 2019/2/21 9:58

*/

? ? private LonggetNextId(String collName){

????????Query query =new Query(Criteria.where("collection_name").is(collName));

? ? ? ? Update update =new Update();

? ? ? ? update.inc("seqId", 1);

? ? ? ? FindAndModifyOptions options =new FindAndModifyOptions();

? ? ? ? options.upsert(true);

? ? ? ? options.returnNew(true);

? ? ? ? SeqInfo seqInfo =mongoTemplate.findAndModify(query, update, options, SeqInfo.class);

? ? ? ? assert seqInfo !=null;

? ? ? ? return seqInfo.getSeqId();

? ? }

}

(4)使用方法如下孔祸。本文才用的是MongoRepository方式對(duì)MongoDB進(jìn)行增刪查改隆敢,只需要insert即可,不需要其他代碼崔慧。

@Service

public class ApplicationService Implimplements ApplicationService {

? ? @Autowired

? ? private?ApplicationRepository?applicationRepository;


? ??@Override

????public Application create(Application application) {

? ? ? ? //其他代碼

? ? ? ? return applicationRepository.insert(application);

? ? }

這樣就可以了拂蝎。


最后說(shuō)一句,簡(jiǎn)書(shū)自帶的MarkDown模式真難用惶室,插入代碼塊后温自,一部分代碼還是顯示為文本玄货。請(qǐng)問(wèn)你們的技術(shù)是怎么搞得?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捣作,一起剝皮案震驚了整個(gè)濱河市誉结,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌券躁,老刑警劉巖惩坑,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異也拜,居然都是意外死亡以舒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)慢哈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蔓钟,“玉大人,你說(shuō)我怎么就攤上這事卵贱±哪” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵键俱,是天一觀的道長(zhǎng)兰绣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)编振,這世上最難降的妖魔是什么缀辩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮踪央,結(jié)果婚禮上臀玄,老公的妹妹穿的比我還像新娘。我一直安慰自己畅蹂,他們只是感情好健无,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著液斜,像睡著了一般睬涧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旗唁,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天畦浓,我揣著相機(jī)與錄音,去河邊找鬼检疫。 笑死讶请,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夺溢,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼论巍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了风响?” 一聲冷哼從身側(cè)響起嘉汰,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎状勤,沒(méi)想到半個(gè)月后鞋怀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡持搜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年密似,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葫盼。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡残腌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贫导,到底是詐尸還是另有隱情抛猫,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布孩灯,位于F島的核電站闺金,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏钱反。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一匣距、第九天 我趴在偏房一處隱蔽的房頂上張望面哥。 院中可真熱鬧,春花似錦毅待、人聲如沸尚卫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吱涉。三九已至,卻和暖如春外里,著一層夾襖步出監(jiān)牢的瞬間怎爵,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工盅蝗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鳖链,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓墩莫,卻偏偏與公主長(zhǎng)得像芙委,于是被迫代替她去往敵國(guó)和親逞敷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容