Spring Boot与MongoTemplate

11

我是新手,正在学习Spring Boot和MongoDb。 正在尝试一些使用Mongo存储库和Spring Boot的例子。 但是在查阅了一些文档后发现,Mongo Template将是更好的选择。无法找到一个合适的Spring Boot与Mongo Template示例。

  1. 有人可以举个例子帮助我吗?

  2. 在尝试Mongo模板时,我们需要创建一个用户定义的存储库接口并扩展存储库或CRUD存储库吗?


1
你找到解决方案了吗?我们可以在同一个项目中同时使用模板和存储库吗?比如说,如果我想实现一个自定义存储库,我可以使用模板来做吗? - Gauranga
2个回答

7

如需进一步解释,您甚至可以同时使用两种方法。

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

如果您发现使用 Spring 的查询创建功能进行某些操作过于复杂,并且不想使用@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);
    }
}

我相信同时使用mongo模板和mongo存储库会创建两个数据库连接。 - barrypicker

4

我发现了一些使用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 {

MongoDB仓库

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接