1.首先是添加Spring Data mongo的配置依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>

2.mongodb配置

spring.data.mongodb.uri=mongodb://localhost:27017/dbname

3.单实体类来说明:

@Document(collection = "users")
public class User {
@Id
private String id; private String username;
private Integer age;
}

这段代码里面省略了getter和setter,所以看起来非常简单。值得注意的一点是@Document注解,它是mongoDB专用的。了解mongoDB的话,都知道collection之于mongoDB,就像关系数据库的table一样。通过指定collection,可以实现实体类到mongoDB集合的映射关系。如果不显式指定collection,Spring会根据实体类的名字去推测集合的名字。

配置完毕,实体类也实现完毕,我们需要的就是实现mongoDB的各种操作,从而把数据库和应用程序连接起来。按照Spring data的现状,实现数据库操作大概有两种方式——MongoRepository、mongoTemplate。MongoRepository是一种相对简单的方式,它可以帮我们轻松的实现简答的CRUD操作。

下面就是它的使用方式:

public interface UserRepository extends MongoRepository<User, Long>{
User findByUsername(String username);
}

然后在使用数据库的地方直接依赖注入UserRepository即可。的确非常简单,这是因为Spring帮我们做了两件事,首先Spring会为Repository生成bean,一般来说Spring内置的Repository及其子类都使用了@NoRepositoryBean注解,所以只有用户定义的没有该注解的interface才会被实例化一个bean。其次Spring会根据interface中的方法名,去自动生成CRUD操作的函数,因此我们连实现代码都不用写了。

使用MongoTemplate会稍微麻烦一点,但同时它能够完成的工作也更多一些。下面是使用mongoTemplate的方式,为了展示其强大的能力,我们使用一个稍微复杂点例子。

@Component
public class ArticleRepositoryImpl { MongoTemplate mongoTemplate; @Autowired
public ArticleRepositoryImpl(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
public List<Article> find(Query query) {
return mongoTemplate.find(query, Article.class);
}
public Article findOne(Query query) {
return mongoTemplate.findOne(query, Article.class);
}
public void update(Query query, Update update) {
mongoTemplate.findAndModify(query, update, Article.class);
}
public Article save(Article article) {
mongoTemplate.insert(article);
return article;
} public Article findById(String id) {
return mongoTemplate.findById(id, Article.class);
} public Page<Article> findPage(Page<Article> page, Query query) {
long count = count(query);
int pageNumber = page.getPageNumber();
int pageSize = page.getPageSize();
query.skip((pageNumber - 1) * pageSize).limit(pageSize);
List<Article> rows = find(query);
page.setContent(rows);
return page;
} public long count(Query query) {
return mongoTemplate.count(query, Article.class);
}
}

对于Article这个实体类,我们其实不需要太关心它的细节。为了实现分页查询的功能(主要在findPage中实现),代码使用了略微复杂的查询操作,这里就体现到了mongoTemplate的更为强大的定制化操作能力。而这里的component注解也只是一种声明bean的方式。除了它之外,还有很多配置的方式,但功能都是一样的,这里也就不深究了。

把数据库的结果通过一个RESTful的接口返回去,就可以看到数据库的查询结果,代码如下所示:

@RestController
public class SimpleRestController { private UserRepository userRepository;
@Autowired
public SimpleRestController(UserRepository userRepository) {
this.userRepository = userRepository;
} @RequestMapping(value="/users", method = RequestMethod.GET)
public List<User> greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return userRepository.findAll();
} }

springboot集成mongoDB简易使用的更多相关文章

  1. springboot集成mongoDB 异常认证

    1.springboot连接mongoDB 出现异常认证 异常详情: com.mongodb.MongoSecurityException: Exception authenticating Mong ...

  2. SpringBoot集成MongoDB之导入导出和模板下载

    前言 自己很对自己在项目中集成MongoDb做的导入导出以及模板下载的方法总结如下,有不到之处敬请批评指正! 1.pom.xml依赖引入 <!-- excel导入导出 --> <de ...

  3. SpringBoot集成MongoDB

    前言 之前写了各种nosql数据库的比较,以及相关理论,现在我在本地以springboot+MongoDB框架,探究了具体的运行流程,下面总结一下,分享给大家. 运行前准备 安装并启动MongoDB应 ...

  4. springboot 集成mongodb

    环境依赖 在pom文件引入spring-boot-starter-data-mongodb依赖: <dependency> <groupId>org.springframewo ...

  5. SpringBoot 集成mongodb(1)单数据源配置

    新项目要用到mongodb,于是在个人电脑上的虚拟环境linux上安装了下mongodb,练习熟悉下. 1.虚拟机上启动mongodb. 首先查看虚拟机ip地址,忘了哈~~ 命令行>ifconf ...

  6. Springboot集成MongoDB实现CRUD

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  7. springboot集成mongoDB需要认证

    报错: Mon Nov 25 01:09:48 CST 2019 There was an unexpected error (type=Internal Server Error, status=5 ...

  8. SpringBoot 集成mongodb(2)多数据源配置

    github:https://github.com/xiaozhuanfeng/mongoProj 现MongoDB有两个数据库: pom.xml: <!-- mongodb 配置 --> ...

  9. springboot集成mongodb实现动态切换数据源

    主要实现原理,利用spring的aop 在切入点执行db操作之前 将数据库切换: 本例子采用aop在controller进行拦截 拦截到MongoTemplate.class 切换数据源后重新放回去 ...

随机推荐

  1. [Qt Quick] qmlscene 工具的使用

    qmlscene是Qt 5提供的一个查看qml文件效果的工具.特点是不需要编译应用程序. qmlscene = qml + scene (场景) qmlscene.exe位于Qt的安装目录下 (类似/ ...

  2. IntelliJ跳转到抽象方法的实现

    ctrl + b (等价于ctrl + 鼠标点击方法名)会调到这个类型的抽象方法中: 如果想要跳转到这个方法的具体实现可以使用 ctrl + alt + 鼠标点击方法名. IntelliJ快速查找一个 ...

  3. ArcGIS超级工具SPTOOLS-MXD操作篇

    1.1  MXD批量裁剪 操作视频:https://weibo.com/tv/v/Hy7P6bF7d?fid=1034:4381332084881258 把当前窗口的MXD,按某个图层的某个字段批量裁 ...

  4. Android5.0以下drawable tag vector错误的解决办法(转发)

    Android5.0以下drawable tag vector错误的解决办法 在Androi 5.0以下的设备可能会报这样的错误: Caused by: org.xmlpull.v1.XmlPullP ...

  5. Flink简介

    Flink简介 Flink的核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布,数据通信以及容错机制等功能.基于流执行引擎,Flink提供了诸多更高抽象层的API以方便用户编写分布 ...

  6. Linux中查看系统资源占用情况的命令

    用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况 ...

  7. 手把手教你实现RecyclerView的下拉刷新和上拉加载更多

    手把手教你实现RecyclerView的下拉刷新和上拉加载更多     版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...

  8. mongodb 添加用户报错TypeError:db.addUser is not a function (mongodb3.4.1)

    1:问题如下: 原因是 新版的MongoDB已经不支持addUser方法了. 改成createUser了. 使用方法如下    2:具体解释一下db.createUser()方法的用法   定义: 创 ...

  9. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_01-自定义查询页面-服务端-Dao

    在页面输入查询条件,查询符合条件的页面信息. 查询条件如下: 站点Id:精确匹配 模板Id:精确匹配 页面别名:模糊匹配 spring mongoDB如何自定义条件 在Repository的findA ...

  10. python3 枚举enum定义和使用

    两种方式定义枚举类: 1.直接使用Enum列出多个枚举值来创建枚举类. 2.通过集成Enum基类派生枚举类. 程序示范: 1.直接使用Enum列出多个枚举值来创建枚举类. from enum impo ...