Spring BootとMongoDbは初めてです。 MongoリポジトリとSpring Bootでいくつかの例を試します。しかし、いくつかのドキュメントを調べた後、Mongo Templateがより良いオプションであることがわかりました。 Mongoテンプレートの例で適切なSpring Bootを取得できません。
誰かが同じ例を教えてください。
Mongoテンプレートを試すときに、ユーザー定義のリポジトリインターフェイスを作成し、リポジトリまたはCRUDリポジトリを拡張する必要がありますか?
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> {}
詳細については、両方を同時に使用することもできます。
MongoRepository
はMongoTemplate
と同様に単なる抽象化レイヤーですが、インターフェースがよりシンプルです。
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);
}
}