带有 MongoTemplate 的 Spring Boot

Posted

技术标签:

【中文标题】带有 MongoTemplate 的 Spring Boot【英文标题】:Spring Boot with MongoTemplate 【发布时间】:2016-11-12 07:08:44 【问题描述】:

我是 Spring Boot 和 MongoDb 的新手。 使用 Mongo Repositories 和 Spring Boot 尝试一些示例。 但是在浏览了一些文档后发现 Mongo Template 会是一个更好的选择。无法使用 Mongo 模板示例获得正确的 Spring Boot。

    谁能帮我举个同样的例子。

    在尝试使用 Mongo 模板时,我们是否需要创建用户定义的存储库接口并扩展存储库或 CRUD 存储库?

【问题讨论】:

您找到解决方案了吗?我们可以在同一个项目中同时使用模板和存储库吗?假设我想实现一个自定义存储库,我可以使用模板吗? 【参考方案1】:

为了进一步解释,您甚至可以同时使用两者。

MongoRepository 只是一个抽象层,类似于MongoTemplate,但接口更简单。

如果你发现使用 Spring query-creation 做某种操作过于复杂,并且不知何故不想使用 @Query(例如,你在构造查询时需要 IDE 类型提示),你可以扩展 @ 987654326@,使用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);
    

【讨论】:

【参考方案2】:

我找到了一些使用 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> 

【讨论】:

嗨 Sarvanna,我的问题是当我们使用 Mongo 模板时是否需要创建一个 Repository 类?据我所知,Mongo Template 和 Mongo Repository 是两个不同的实体。 您不需要同时创建两者,模板基本上是连接工厂的包装器,提供基本的 CRUD 操作 我发布的链接是使用模板,但如果你想使用 JPA,你可以看到我发布的代码

以上是关于带有 MongoTemplate 的 Spring Boot的主要内容,如果未能解决你的问题,请参考以下文章

spring mongoTemplate简单使用

没有名为“mongoTemplate”的 bean 可用。 Spring Boot + MongoDB

spring-data-mongo的MongoTemplate开发

Mongotemplate聚合java spring GroupBy

使用 Spring Boot 和 MongoTemplate 对 MongoDB 结果进行排序

用Spring MongoTemplate实现根据时间倒序查询