乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      為MongoDB增加自增長主鍵生成的功能

       CevenCheng 2011-09-29

      為MongoDB增加自增長主鍵生成的功能

      標簽: MongoDB 自增長主鍵
      每個MongoDB的document都有一個_id字段作為它的第一個屬性,這個值通常是一個BSON對象id,因此,這個id對于集合中的每個成員都是唯一的,如果用戶插入一個document沒有提供一個id,數(shù)據(jù)庫將自動生成一個id,并存儲在_id字段。   
         The BSON ObjectId Datatype   
      一個BSON ObjectID是由12個字節(jié)組成:4字節(jié)時間+3字節(jié)機器id+2字節(jié)進程id+3字節(jié)的數(shù)字
      "_id" : ObjectId("4c691e72ed2a47b462dfa806") }


      有時候我們的應(yīng)用中需要自增長的數(shù)字型主鍵,MongoDB在這方面并沒有給我們提供支持,我們需要加以改造,使其具有自增長主鍵生成的功能。此次的功能改造,依賴的是morphia開源項目(MongoDB在java語言上的ORM實現(xiàn),http://code.google.com/p/morphia/),直接上代碼吧。


      首先定義一個保存各個 collection的主鍵增量值的系統(tǒng)配置collection:StoredSeqence

      java 代碼
      1. /**  
      2.  * MongoDB自增長主鍵維護隊列,類似于MSSQL,Oracle維護主鍵的方式  
      3.  *   
      4.  * @author yongtree  
      5.  * @date 2011-1-17 下午06:58:05  
      6.  * @version 1.0  
      7.  */  
      8. @Entity(noClassnameStored=true)   
      9. public class StoredSeqence implements Serializable {   
      10.   
      11.     private static final long serialVersionUID = 1L;   
      12.   
      13.     @Id  
      14.     String collName;   
      15.   
      16.     Long value;   
      17.        
      18.   
      19.     public StoredSeqence(){   
      20.            
      21.     }   
      22.        
      23.     public StoredSeqence(String collName) {   
      24.         this.collName = collName;   
      25.     }   
      26.   
      27.     public Long getValue() {   
      28.         return value;   
      29.     }   
      30.   
      31.     public void setValue(Long value) {   
      32.         this.value = value;   
      33.     }   
      34.   
      35.     public String getCollName() {   
      36.         return collName;   
      37.     }   
      38.   
      39.     public void setCollName(String collName) {   
      40.         this.collName = collName;   
      41.     }   
      42.   
      43.        
      44.   
      45.        
      46. }   
      然后定義一個實體的基類,在基類中處理主鍵生成。
      java 代碼
      1. /**  
      2.  * 自增長數(shù)字類型主鍵的Mongo實體  
      3.  *   
      4.  * @author yongtree  
      5.  * @date 2011-1-17 下午04:11:04  
      6.  * @version 1.0  
      7.  */  
      8. public abstract class LongPKMongoEO extends BaseMongoEO {   
      9.   
      10.     @Id  
      11.     Long _id;   
      12.   
      13.     @Transient  
      14.     protected Datastore ds;   
      15.        
      16.        
      17.   
      18.     public void setDs(Datastore ds) {   
      19.         this.ds = ds;   
      20.     }   
      21.   
      22.     @PrePersist  
      23.     void prePersist() {   
      24.            
      25.         //自增性主鍵的處理   
      26.            
      27.         if (_id == null) {   
      28.             String collName = ds.getCollection(getClass()).getName();   
      29.             Query<StoredSeqence> q = ds.find(StoredSeqence.class"_id",   
      30.                     collName);   
      31.             StoredSeqence ss = q.get();   
      32.             if(ss==null){//不存在該實體的注冊,則新創(chuàng)建一個   
      33.                 ss = new StoredSeqence(collName);   
      34.                 ss.setValue(1l);   
      35.             }else{   
      36.                 ss.setValue(ss.getValue()+1);   
      37.             }   
      38.             ds.save(ss);   
      39.             _id=ss.value;   
      40.         }   
      41.     }   
      42.   
      43.     public Long getId() {   
      44.         return _id;   
      45.     }   
      46.   
      47. }  


      這樣自增長主鍵的生成的主要功能基本上已經(jīng)完成了,具體如何使用,接下來將根據(jù)實際的項目再做介紹,請繼續(xù)關(guān)注我的博客。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多