Springを使ってMongodbにアクセスする方法大全書——Spring Data MongoDB

19573 ワード

1.概要
Spring Data MongoDBはSpringフレームでmongodbにアクセスする神器であり、それを利用して非常に読みやすく、書いてもいいです.本文ではSpring Data MongoDBを使って、mongodbデータベースにアクセスするいくつかの方法を紹介します.
  • QueryとCriteria類を使う
  • JPA自動生成されたクエリ方法
  • @Queryを使ってJSONクエリ
  • に基づいて注釈を行います.
    始まる前に、まずマベント依存を導入する必要があります.
    1.1 Maven追加の依存
    Spring Data MongoDBを使用するには、以下の項目をpom.xmlファイルに追加する必要があります.
    <dependency>
        <groupId>org.springframework.datagroupId> <artifactId>spring-data-mongodbartifactId> <version>1.9.6.RELEASEversion> dependency>
    バージョンは必要に応じて選択します.
    2.文書クエリ
    Spring Dataを使ってMongoDBを調べる最も一般的な方法の一つはQueryとCriteria類を使うことであり、それらは非常にローカルオペレータに近い.
    2.1 isクエリ
    以下の例では、Erricという名前のユーザを探しています.
    私たちのデータベースを見てみましょう.
    [
        {
            "_id" : ObjectId("55c0e5e5511f0a164a581907"),
            "_class" : "org.baeldung.model.User",
            "name" : "Eric", "age" : 45 }, { "_id" : ObjectId("55c0e5e5511f0a164a581908"), "_class" : "org.baeldung.model.User", "name" : "Antony", "age" : 55 } }]
    検索コードを見てみましょう.
    Query query = new Query();
    query.addCriteria(Criteria.where("name").is("Eric"));
    List users = mongoTemplate.find(query, User.class);
    予想通り、この論理は戻ります.
    {
        "_id" : ObjectId("55c0e5e5511f0a164a581907"),
        "_class" : "org.baeldung.model.User",
        "name" : "Eric", "age" : 45 }
    2.2正則クエリ
    正規表現はより柔軟で強力なクエリータイプです.これはMongoDB$regexを使用した標準を使用しており、このフィールドに適用されるこの正規表現のすべての記録を返す.
    その役割はstartingWith、endingWith操作に似ています.例を見てみましょう.
    名前をAで始めたすべてのユーザを探しています.これはデータベースの状態です.
    [
        {
            "_id" : ObjectId("55c0e5e5511f0a164a581907"),
            "_class" : "org.baeldung.model.User",
            "name" : "Eric", "age" : 45 }, { "_id" : ObjectId("55c0e5e5511f0a164a581908"), "_class" : "org.baeldung.model.User", "name" : "Antony", "age" : 33 }, { "_id" : ObjectId("55c0e5e5511f0a164a581909"), "_class" : "org.baeldung.model.User", "name" : "Alice", "age" : 35 } ]
    クエリーを作成します.
    Query query = new Query();
    query.addCriteria(Criteria.where("name").regex("^A"));
    List users = mongoTemplate.find(query,User.class);
    この運転は2つのレコードに戻ります.
    [
        {
            "_id" : ObjectId("55c0e5e5511f0a164a581908"),
            "_class" : "org.baeldung.model.User",
            "name" : "Antony", "age" : 33 }, { "_id" : ObjectId("55c0e5e5511f0a164a581909"), "_class" : "org.baeldung.model.User", "name" : "Alice", "age" : 35 } ]
    以下はもう一つの簡単な例です.今回の検索名はcで終わるすべてのユーザです.
    Query query = new Query();
    query.addCriteria(Criteria.where("name").regex("c$"));
    List users = mongoTemplate.find(query, User.class);
    結果は:
    {
        "_id" : ObjectId("55c0e5e5511f0a164a581907"),
        "_class" : "org.baeldung.model.User",
        "name" : "Eric", "age" : 45 }
    2.3 LTとGT
    $lt(小さい)演算子と$gt(大きい)です.
    早く例を見てみましょう.20歳から50歳までの年齢のすべてのユーザーを探しています.
    データベースは:
    [
        {
            "_id" : ObjectId("55c0e5e5511f0a164a581907"),
            "_class" : "org.baeldung.model.User",
            "name" : "Eric", "age" : 45 }, { "_id" : ObjectId("55c0e5e5511f0a164a581908"), "_class" : "org.baeldung.model.User", "name" : "Antony", "age" : 55 } }
    クエリーを作成:
    Query query = new Query();
    query.addCriteria(Criteria.where("age").lt(50).gt(20)); List users = mongoTemplate.find(query,User.class);
    結果-年齢が20以上で、50未満のすべてのユーザ:
    {
        "_id" : ObjectId("55c0e5e5511f0a164a581907"),
        "_class" : "org.baeldung.model.User",
        "name" : "Eric", "age" : 45 }
    2.4結果の並べ替え
    Sortは、結果の順序を指定するために使用されます.
    まず-ここは既存のデータです.
    [
        {
            "_id" : ObjectId("55c0e5e5511f0a164a581907"),
            "_class" : "org.baeldung.model.User",
            "name" : "Eric", "age" : 45 }, { "_id" : ObjectId("55c0e5e5511f0a164a581908"), "_class" : "org.baeldung.model.User", "name" : "Antony", "age" : 33 }, { "_id" : ObjectId("55c0e5e5511f0a164a581909"), "_class" : "org.baeldung.model.User", "name" : "Alice", "age" : 35 } ]
    並べ替えを実行した後:
    Query query = new Query();
    query.with(new Sort(Sort.Direction.ASC, "age"));
    List users = mongoTemplate.find(query,User.class);
    これはお問い合わせの結果です.年齢別によく並べられています.
    [
        {
            "_id" : ObjectId("55c0e5e5511f0a164a581908"),
            "_class" : "org.baeldung.model.User",
            "name" : "Antony", "age" : 33 }, { "_id" : ObjectId("55c0e5e5511f0a164a581909"), "_class" : "org.baeldung.model.User", "name" : "Alice", "age" : 35 }, { "_id" : ObjectId("55c0e5e5511f0a164a581907"), "_class" : "org.baeldung.model.User", "name" : "Eric", "age" : 45 } ]
    2.5ページ
    改ページを使う簡単な例を見てみましょう.
    これはデータベースの状態です.
    [
        {
            "_id" : ObjectId("55c0e5e5511f0a164a581907"),
            "_class" : "org.baeldung.model.User",
            "name" : "Eric", "age" : 45 }, { "_id" : ObjectId("55c0e5e5511f0a164a581908"), "_class" : "org.baeldung.model.User", "name" : "Antony", "age" : 33 }, { "_id" : ObjectId("55c0e5e5511f0a164a581909"), "_class" : "org.baeldung.model.User", "name" : "Alice", "age" : 35 } ]
    現在、クエリーロジックは、2サイズのページだけが必要です.
    final Pageable pageableRequest = new PageRequest(0, 2);
    Query query = new Query(); query.with(pageableRequest);
    結果:
    [
        {
            "_id" : ObjectId("55c0e5e5511f0a164a581907"),
            "_class" : "org.baeldung.model.User",
            "name" : "Eric", "age" : 45 }, { "_id" : ObjectId("55c0e5e5511f0a164a581908"), "_class" : "org.baeldung.model.User", "name" : "Antony", "age" : 33 } ]
    このAPIのすべての詳細を探るために、ここはQueryとCriteria類の文書です.
    3.生成された照会方法(Generated Query Methods)
    検索方法はJPAの特性の一つで、Spring Data Mongodbでも使用できます.
    2里の機能を実現するには、インターフェースで方法を宣言すればいいです.
    public interface UserRepository 
      extends MongoRepository<User, String>, QueryDslPredicateExecutor<User> { ... }
    3.1 FindByX
    findByタイプのクエリを探索することによって簡単に開始します.
    List findByName(String name);
    前のセクションと同じ2.1-クエリーは同じ結果を持ち、指定された名前を持つすべてのユーザを検索します.
    List<User> users = userRepository.findByName("Eric");
    3.2 StartingWith and endingWith.
    以下は操作過程の簡単な例である.
    List findByNameStartingWith(String regexp);
    
    List findByNameEndingWith(String regexp);
    実際にこの例を使うと、もちろんとても簡単です.
    List<User> users = userRepository.findByNameStartingWith("A");
    List<User> users = userRepository.findByNameEndingWith("c");
    結果はまったく同じです.
    3.3 Between
    2.3と同様に、これは、ageGTとageLTの間の年齢のすべてのユーザを返します.
    List findByAgeBetween(int ageGT, int ageLT);
    List users = userRepository.findByAgeBetween(20, 50);
    3.4 LikeとOrderBy
    このより高級な例を見てみましょう.生成されたクエリーのための2つのタイプの修飾子を組み合わせます.
    名前にアルファベットAが含まれているすべてのユーザーを検索します.年齢順に結果を並べます.
    List<User> users = userRepository.findByNameLikeOrderByAgeAsc("A");
    結果:
    [
        {
            "_id" : ObjectId("55c0e5e5511f0a164a581908"),
            "_class" : "org.baeldung.model.User",
            "name" : "Antony", "age" : 33 }, { "_id" : ObjectId("55c0e5e5511f0a164a581909"), "_class" : "org.baeldung.model.User", "name" : "Alice", "age" : 35 } ]
    4.JSONの照会方法
    もし私たちは方法の名前や条件で検索を表現できないなら、より低いレベルのことができます.@Queryを使ってコメントします.
    この注釈により、元のクエリーを指定します.Mongo JSONクエリ文字列として.
    4.1 FindBy
    まず簡単なのを見てみましょう.どのようにしてタイプを探す方法の第一になりますか?
    @Query("{ 'name' : ?0 }")
    List findUsersByName(String name);
    この方法は名前でユーザー-プレースホルダを返すべきですか?0参照方法の最初のパラメータです.
    4.2$regex
    正規表現駆動のクエリーを見てみましょう.もちろん2.2と3.2と同じ結果が得られます.
    @Query("{ 'name' : { $regex: ?0 } }")
    List findUsersByRegexpName(String regexp);
    使い方もまったく同じです.
    List<User> users = userRepository.findUsersByRegexpName("^A");
    List<User> users = userRepository.findUsersByRegexpName("c$");
    4.3.$ltと$gt
    今から私達はltとgtクエリを実現します.
    @Query("{ 'age' : { $gt: ?0, $lt: ?1 } }")
    List findUsersByAgeBetween(int ageGT, int ageLT);
    5.結論
    本論文ではSpring Data MongoDBを用いたクエリーの一般的な方法を検討した.
    本明細書の例は、 spring-data-mongodbはここでダウンロードします.
    本文はAガイドto Queries in Spring Data MongoDBを参考にします.
    作者:Jadepeng出典:jqpengの技術メモ帳――http://www.cnblogs.com/xiaoqiあなたのサポートは博主にとって最大の励ましです.真剣に読んでくれてありがとうございます.この文章の著作権は作者の所有になります.転載を歓迎しますが、作者の同意なしにこの声明を保留しなければなりません.そして、文章のページの明確な位置で原文の接続を提供します.そうでなければ、法律責任を追及する権利を保留します.