安らか:MongoDBを持つ春ブーツ

MongoDBはなぜですか?

以前¥日報プロジェクトを続けると、今日のタスクは、永続的なストレージとしてmongogdb選択することです。

NoSQLのは簡単に急速に変化するビジネスシナリオのために、リストを展開することができ非常に適している、あなたがビジネスに建設されるリレーショナルデータベースモデルをインストールする必要がRDBMS:NoSQLのとRDBMSと選択肢を対比、私は多くの情報を参照して、重要なポイントですモードは、シーンは、ビジネスシステムの機が熟しています。など、日付、タイトル、内容、アドレス、画像、これに基づいて、私は永続的にMongoDBとしてこのプロジェクトを選んだ:私の現在のプロジェクト--dailyReportは、私はその属性を持つ必要がありますレポートのためにすることを決定しませんストレージ。

MongoDBは春ブーツと組み合わせて使用​​する方法

  • ポンポン、ファイルを変更サポートするMongoDBを高めます

<依存性> 
  <のgroupId> org.springframework.boot </のgroupId> 
  <たartifactId>ばねブートスタータデータMongoDBの</たartifactId> </依存>
  • String.Formatのを使用して、オーバーロードToString関数は、オブジェクトを出力するレポートの再設計は、エンティティクラス、id属性は@Idアノテーションで修飾され、MongoDBのために使用されます。

インポートorg.springframework.data.annotation.Id; / ** 
 * @author duqi 
 * @Create 2015年11月17日19:31 
 * / publicクラスレポート{@Id 
    プライベート文字列ID; プライベート文字列、日付、プライベート文字列コンテンツ; プライベート文字列のタイトル。パブリックレポート(){ 

    }パブリックレポート(文字列、日付、文字列のタイトル、文字列の内容){this.date =日付。this.title =タイトル; this.content =コンテンツ; 
    }パブリック文字列のgetId(){IDを返します。
    }公共ボイドSETID(文字列ID){this.id = ID。
    }パブリック文字列あるgetTitle(){戻りタイトル。
    }公共ボイドのsetTitle(文字列のタイトル){this.title =タイトル; 
    }パブリック文字列のgetDate(){戻り日付。
    }公共ボイドのsetdate(文字列関数datestr){this.date =関数datestr。
    }パブリック文字列のgetContent(){戻り含量; 
    }公共ボイドのsetContent(ストリング含有量){this.content =コンテンツ; 
    } @Override 
    パブリック文字列のtoString(){String.Formatの( "レポート[ID =%sは、日付= '%s'は、コンテンツ= '%s'は、タイトル= '%S']"、ID、日付、コンテンツを返します、タイトル)。
    } 
}
  • 保存し、挿入し、好きなのfindAll:MongoRepositoryからインターフェース、例えば、一般的なMongoRepository CRUD操作を備えたインタフェースを継承ReportRepositoryインタフェースを増やします。私たちは、次のようにタイトルサーチレポート、特定のReportRepositoryインタフェースコードに応じて、例えば、見つけるために、独自のインタフェースを定義することができます。

輸入org.springframework.data.mongodb.repository.MongoRepository;輸入はjava.util.List; / ** 
 * 15/11/22にduqiによって作成されます。
 * /パブリックインターフェイスReportRepositoryはMongoRepository <レポート、文字列> {報告findByTitle(文字列のタイトル)が延びています。一覧<レポート> findByDate(文字列の日付)。
}
  • ReportServiceのは、コードを変更地図の初期化パラメータに従ってConrollerは、レポートオブジェクトを来ますCreateReport機能を高め、MongoDBの中のデータを保存するためにReportRepositoryを呼び出して、クエリインターフェイスがfindByTitleを使用していないキャッシュ際場合getReportDetails機能のために、まだ、キャッシュを開きますMongoDBのデータベース。

輸入com.javadu.dailyReport.domain.Report;輸入com.javadu.dailyReport.domain.ReportRepository;インポートはorg.springframework.beans.factory.annotation.Autowired、輸入org.springframework.cache.annotation.Cacheable;輸入org.springframework .stereotype.Service;輸入java.util.Map; / ** 
 * @authorのduqi 
 * @Create 2015年11月17日午後8時05分
 * / @ ServicepublicクラスReportServiceの{@Autowired 
    プライベートReportRepositoryリポジトリ。パブリックレポートますCreateReport(地図<文字列、オブジェクト> reportMap){ 
        レポートレポート=新報告書(reportMap.get( "日付")。のtoString()、
                reportMap.get( "タイトル")。のtoString()、
                reportMap.get(」 。コンテンツ」)のtoString()); 

        repository.save(報告書)。レポートを返します。
    @Cacheable}(値= "reportcache"するKeyGeneratorは= "wiselyKeyGenerator")パブリックレポートgetReportDetails(文字列のタイトル){ 
        するSystem.out.println( "ノーキャッシュ場合、ここでコール---データベースクエリ、タイトル=" +タイトル)。 repository.findByTitleリターン(タイトル); 
    } 
}

安らかなインタフェース

コントローラは、RPC経由(たとえば、特定のURLマッピングサービスを担当し、サービス層では、実際のビジネス・ロジックを行い、ビジネスロジックここでは非常にシンプルなので、サービス層は任意ですが、ビジネスロジックが複雑な場合リモートサービス)を呼び出して、これらの操作は、サービス層を完了する必要があります。+建設レスポンスが要求データを転送するために、必要な権限が、それはまた、完成コントローラ層のAOPを使用している、検証するとき:総合、コントローラ層は、のためにのみ責任があります。

すべての一般的な操作のために報告する(エンティティ)がコントローラに配置され、メモは@RestControllerと@RequestMapping(「/レポート」)で修飾された、全てXXXX /レポートURLがReportControllerによって処理される表します。

役職

増加のためのレポートの操作は、我々は、POSTメソッドを選択し、POSTリクエストのボディ@RequestBody、修正ますCreateReportすなわち、関数のパラメータを使用して要求。

取得する

問い合わせレポートの操作のために、我々はGETメソッドを選択し、URLの形式は次のとおりである:「XXX /レポート/ $ {レポートのタイトル}」、そのタイトルを変更したパラメータ@PathVariable URL入力を使用して。

輸入com.javadu.dailyReport.domain.Report;輸入com.javadu.dailyReport.service.ReportService;輸入org.slf4j.Logger;輸入org.slf4j.LoggerFactory;インポートはorg.springframework.beans.factory.annotation.Autowired;インポートorg.springframework.web.bind.annotation *;輸入java.util.LinkedHashMap;輸入java.util.Map; / ** 
 * @author duqi 
 * @Create 2015年11月17日午前20時10 
 * / @ RestController @ RequestMapping ( "/レポート")パブリッククラスReportController {プライベート静的最終ロガーロガー= LoggerFactory.getLogger(ReportController.class)。@Autowired 
    ReportServiceののreportService。@RequestMapping(メソッド= RequestMethod.POST)パブリックマップの<string、オブジェクト>ますCreateReport(@RequestBody地図の<string、オブジェクト> reportMap){ 
        logger.info( "ますCreateReport")。
        レポートレポート= reportService.createReport(reportMap)。

        地図<文字列、オブジェクト>応答=新しいのLinkedHashMap <文字列、オブジェクト>(); 
        response.put(「メッセージ」、「正常に作成報告書」)。
        response.put( "報告書"、レポート); 応答を返します。
    } @RequestMapping(方法= RequestMethod.GET、値= "/ {reportTitle}")パブリックレポートgetReportDetails(@PathVariable( "reportTitle")文字列のタイトル){ 
        logger.info( "getReportDetails")。リターンreportService.getReportDetails(タイトル)。
    } 
}

私がここではなく、更新および削除操作

おすすめ

転載: blog.51cto.com/14028890/2416796