web-dev-qa-db-ja.com

MongoTemplateによるSpring Boot

Spring BootとMongoDbは初めてです。 MongoリポジトリとSpring Bootでいくつかの例を試します。しかし、いくつかのドキュメントを調べた後、Mongo Templateがより良いオプションであることがわかりました。 Mongoテンプレートの例で適切なSpring Bootを取得できません。

  1. 誰かが同じ例を教えてください。

  2. Mongoテンプレートを試すときに、ユーザー定義のリポジトリインターフェイスを作成し、リポジトリまたはCRUDリポジトリを拡張する必要がありますか?

10
umesh

Mongoテンプレートを使用した例をいくつか見つけました

http://docs.spring.io/spring-data/data-document/docs/current/reference/html/#mongo-template

http://www.mkyong.com/mongodb/spring-data-mongodb-hello-world-example/

JPAの使用に興味がある場合は、以下を参照してください。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-Java-driver</artifactId>
    <version>{mongo.driver.version}</version>
</dependency>

application.properties

#Mongo DB
spring.data.mongodb.database=
spring.data.mongodb.Host=
spring.data.mongodb.password=
spring.data.mongodb.port=
spring.data.mongodb.repositories.enabled=
spring.data.mongodb.uri=
spring.data.mongodb.username=

SpringBootクラス

@SpringBootApplication
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
public class UserApp {

Mongoリポジトリ

@Repository
public interface UserRepository extends MongoRepository<User, Long> {}
3
Saravana

詳細については、両方を同時に使用することもできます。

MongoRepositoryMongoTemplateと同様に単なる抽象化レイヤーですが、インターフェースがよりシンプルです。

Spring query-creation でなんらかの操作を行うのが複雑すぎることが判明し、どういうわけか @Query を使用したくない場合(たとえば、 IDEクエリ作成時のタイプヒント)、MongoRepositoryを拡張して、クエリメカニズムとしてMongoTemplateを使用できます。

まず、カスタムインターフェイスを使用してリポジトリを拡張します。

@Repository
public interface ArticleRepository extends MongoRepository<Article, String>, CustomArticleRepository {
}

次に、インターフェースを宣言します。

public interface CustomArticleRepository {
    List<Article> getArticleFilteredByPage(int page, int num);
}

次に、カスタムリポジトリを実装します。ここでMongoTemplateを自動配線し、それを使用してデータベースにクエリを実行できます。

public class CustomArticleRepositoryImpl implements CustomArticleRepository {

    @Autowired
    MongoTemplate mongoTemplate;

    @Override
    public List<Article> getArticleFilteredByPage(int page, int num) {
        return mongoTemplate.findAll(Article.class)
                .skip(page * num)
                .take(num);
    }
}

最後に、ArticleRepositoryを使用します。

@Service
public class ArticleServiceImpl {

    @Autowired
    private ArticleRepository articleRepository;

    public List<Article> getArticleByPage() {
        return articleRepository.getArticleFilteredByPage(1, 10);
    }
}