Springパッケージmongodbのコード実装


よく知られているように、spring統合のいくつかのnosqlまたはsqlデータベースは、xxxxxTemplateを使用することに慣れています.一般的にxxxxxTemplateを見るとspring統合と考えられます.原生の使い方と区別します.ここではjavaプロジェクトにおけるオリジナルのmongodbの使用方法については議論せず,springが提供するmongodbのパッケージについてのみ議論する.
その前にmongodbのデータストレージフォーマットを理解する必要があります.私は一般的にjson形式で保存しています.構造は次のコードで示されています.mongodbのデータを表示する方法は、mongoVUEツールを使用します.効率に影響を与えることなく、Mongodbに数億レベルのデータを格納できます.注意:Mongodbは多条件クエリーに適していません.私たちは一般的にid値でクエリーをします.マルチ条件クエリーではインデックスを作成する必要があり、ライブラリを検出しやすくなります.
{
  "_id" : "123456789",
  "_class" : "com.OrderInfo",
  "historyId" : "123456789_1_2",
  "orderId" : NumberLong("123456789"),
  "orderDirection" : "  ",
  "overStatus" : "   ",
  "orgArea" : "  ",
  "org" : "   ",
  "orderType" : "    ",
  "paymentType" : "    ",
  "paymentTpyeGroup" : "  ",
  "orderPrice" : 0.0,
  "duePrice" : 0.0,
  "payPrice" : 1000.0,
  "tuiKuanPrice" : 0.0,
  "diffPrice" : -1000.0,
  "memberId" : "testlzg",
  "laiyuan" : "  ",
  "invoicePutType" : "   ",
  "operationTime" : "20190104160726",
  "status" : "  ",
  "carrier" : "      ",
  "ttsj" : "20190104160726",
  "waybillSign" : "300000000000000",
  "operateNodeSystem" : "  -  ",
  "bizNodeType" : "  ",
  "bizNodeName" : "      ",
  "bizNodeCode" : "910",
  "belongSystem" : "TMS",
  "systemCode" : "josl",
  "operater" : "  ",
  "operaterErp" : "1122",
  "distributeType" : "65",
  "endDate" : "20190104160726",
  "validTag" : "1",
  "orderStatus" : "  ",
  "duizhangStatus" : "    ",
  "updateTime" : ISODate("2016-10-10T03:16:52.068Z"),
  "orgId" : "6",
  "createTime" : "20161010111636",
  "damagedPrice" : 0.0,
  "tmplateNode" : "  "
}

スプリングプログラムでmongodbを使用するには、どうすればいいですか.
まず、
mongodbのjarパッケージを導入

            org.springframework.data
            spring-data-mongodb

もちろん、mavenを使用しない場合はspring-data-mongodb-1.3.3を単独で直接ダウンロードできます.JArはあなたのプロジェクトに導入されました.
次に、
私たちのspringのプロファイルにMongodbの構成を追加する必要があります.


    

     
    

    

    
        mongoDbFactoryPrism" />
	  
	  
    
    
        
    

この配置は一目瞭然ではないでしょうか.Springの多くのパッケージ構成もこのようにして、1つのリングに1つのリングを掛けて、最後にmongodbCacheのような使えるハンドルをください.
最後:
MongoDBCacheImplを実装することで、ビジネスロジックを書くことができます.
public class MongoDBCacheImpl {

    public void setMongoOperations(MongoOperations mongoOperations) {
        this.mongoOperations = mongoOperations;
    }

    private MongoOperations mongoOperations;
//  key  
    public  T getByKey(Object key, Class entityClass) {
        return mongoOperations.findById(key, entityClass);
    }

    public  List getByColumn(String columnName, Object columeValue, Class entityClass) {
        return mongoOperations.find(new Query(Criteria.where(columnName).is(columeValue)), entityClass);
    }
//  
    public void save(Object obj) {
        mongoOperations.save(obj);
    }
//  
    public void remove(Object obj) {
        mongoOperations.remove(obj);
    }

    public  Long getCountByDate(Date beginTime, Date endTime, Class entityClass) {

        Assert.notNull(beginTime, "beginTime is not null.");
        Assert.notNull(endTime, "endTime is not null.");
        Assert.isTrue(endTime.after(beginTime), "endTime must be after beginTime.");

        return mongoOperations.count(new Query(Criteria.where("createdate").gte(beginTime).and("createdate").lt(endTime)), entityClass);

    }

    public  List findAllByDate(Date beginTime, Date endTime, Class entityClass) {
        Assert.notNull(beginTime, "beginTime is not null.");
        Assert.notNull(endTime, "endTime is not null.");
        Assert.isTrue(endTime.after(beginTime), "endTime must be after beginTime.");

        Query query = new Query().addCriteria(
                Criteria.where("riqi").exists(true)
                        .andOperator(Criteria.where("riqi").gte(beginTime),Criteria.where("riqi").lt(endTime)));
        return mongoOperations.find(query, entityClass);

    }

    public  List findAllByDateAndColumn(String dateColumnName, Date beginTime, Date endTime, String columnName, Object columeValue, Class entityClass) {

        Query query = new Query().addCriteria(
                Criteria.where(dateColumnName).exists(true)
                        .andOperator(Criteria.where(dateColumnName).gte(beginTime),Criteria.where(dateColumnName).lt(endTime))
                        .and(columnName).is(columeValue));
        return mongoOperations.find(query, entityClass);
    }
    
//  
    public  Long  getCountByDateAndColumn(String dateColumnName, Date beginTime, Date endTime, String columnName, Object columeValue, Class entityClass) {

        Query query = new Query().addCriteria(
                Criteria.where(dateColumnName).exists(true)
                        .andOperator(Criteria.where(dateColumnName).gte(beginTime),Criteria.where(dateColumnName).lt(endTime))
                        .and(columnName).is(columeValue));

        return mongoOperations.count(query,entityClass);
    }
//    
    public  Pagination getPageListByDateColumn(String dateColumnName, Date beginTime, Date endTime, Pagination page, Class entityClass) {
        Query query = new Query().addCriteria(
                Criteria.where(dateColumnName).exists(true)
                        .andOperator(Criteria.where(dateColumnName).gte(beginTime),Criteria.where(dateColumnName).lte(endTime)));
        if (null != page && page.getTotalCount()>0){

                page.setTotalCount(page.getTotalCount());
                query.skip(page.getFirstResult());
                query.limit(page.getPageSize());

        }else {

            return null;
        }

        List pageData = mongoOperations.find(query,entityClass);
        page.setDatas(pageData);

        return page;
    }
//  Key  
    public  void updateByKey(Object key, String updateColumn, Object value, Class entityClass) {
        Query query = new Query(Criteria.where( "_id" ).is(key));
        mongoOperations.updateFirst(query,Update.update(updateColumn,value),entityClass);
    }
//    key
    public  void deleteByKey(Object key, Class entityClass) {
        Query query = new Query(Criteria.where( "_id" ).is(key));
        mongoOperations.remove(query,entityClass);
    }
//    
    public  void removeAll(String dateColumnName, Date beginTime, Date endTime, String columnName, Object columeValue, Class entityClass){
        Query query = new Query().addCriteria(
                Criteria.where(dateColumnName).exists(true)
                        .andOperator(Criteria.where(dateColumnName).gte(beginTime),Criteria.where(dateColumnName).lte(endTime))
                        .and(columnName).is(columeValue));
        mongoOperations.remove(query,entityClass);
    }

}

これでmongodbで私たちのデータを追加削除して調べることができます.レプリケーションレベルのmongodbでは、データ量が3億以上で、更新クエリー操作も一般的に5 ms以内です.