学习Spring Boot:(二十)使用 MongoDB
前言
MongoDB(来自于英文单词“Humongous”,中文含义为“庞大” )是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。
正文
Spring Boot 对 MongoDB 的数据源操作进行了封装。
加入依赖
在 pom.xml 加入:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
配置连接参数
在系统配置文件中配置:
spring:data:mongodb:uri: mongodb://wuwii:123456@localhost:27017/learn
测试使用
- 创建实体
@Data
@Document(collection = "pet") // 标识要持久化到MongoDB的域对象。模型名是 pet
public class Pet implements Serializable {@Id//@Indexed(unique = true) // 使用MongoDB的索引特性标记一个字段private Long id;@Field("pet_name") //自定义设置对应MongoDB中的keyprivate String name;private String species;
}
- 创建 dao 接口完成基础操作
@Repository
public class PetDaoImpl implements PetDao {@Autowiredprivate MongoTemplate mongoTemplate;@Overridepublic Pet find(Long id) {return mongoTemplate.findById(id, Pet.class);}@Overridepublic List<Pet> findAll() {return mongoTemplate.findAll(Pet.class);}@Overridepublic void add(Pet pet) {mongoTemplate.insert(pet);}@Overridepublic void update(Pet pet) {Query query = new Query();Criteria criteria = new Criteria("id");criteria.is(pet.getId());query.addCriteria(criteria);Update update = new Update();update.set("pet_name", pet.getName()).set("species", pet.getSpecies());mongoTemplate.updateFirst(query, update, Pet.class); // 条件,更新的数据,更新的类型}@Overridepublic void delete(Long id) {Criteria criteria = new Criteria("id");criteria.is(id);Query query = new Query();query.addCriteria(criteria);mongoTemplate.remove(query, Pet.class); // 删除的条件、删除的类型}
}
- 简单测试下
@SpringBootTest
@RunWith(SpringRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class PetDaoTest {@Autowiredprivate PetDao petDao;private Pet pet;@Beforepublic void before() {pet = new Pet();pet.setId(1L);pet.setName("Tom");pet.setSpecies("cat");}@Afterpublic void after() {}@Testpublic void test01Add() {Pet pet = new Pet();pet.setId(1L);pet.setName("Tom");pet.setSpecies("cat");petDao.add(pet);}@Testpublic void test02Find() {Assert.assertThat(pet, Matchers.equalTo(petDao.find(pet.getId())));}@Testpublic void test03FindAll() {System.out.println(petDao.findAll());}@Testpublic void test04Update() {pet.setName("KronChan");petDao.update(pet);Assert.assertThat(pet, Matchers.equalTo(petDao.find(pet.getId())));}@Testpublic void test05Delete() {petDao.delete(pet.getId());Assert.assertThat(null, Matchers.equalTo(petDao.find(pet.getId())));}}
去数据库验证结果
> use learn
switched to db learn
> db.pet.find()
{ "_id" : NumberLong(1), "_class" : "com.wuwii.testmongodb.Pet", "pet_name" : "KronChan", "species" : "cat" }
多数据源的使用
未完成
学习Spring Boot:(二十)使用 MongoDB相关推荐
- (转)Spring Boot(二十):使用 spring-boot-admin 对 Spring Boot 服务进行监控
http://www.ityouknow.com/springboot/2018/02/11/spring-boot-admin.html 上一篇文章<Spring Boot(十九):使用 Sp ...
- 学习Spring Boot:(二十五)使用 Redis 实现数据缓存
前言 由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis. 正文 当应用程序 ...
- 学习Spring Boot:(二十六)使用 RabbitMQ 消息队列
前言 前面学习了 RabbitMQ 基础,现在主要记录下学习 Spring Boot 整合 RabbitMQ ,调用它的 API ,以及中间使用的相关功能的记录. 相关的可以去[我的博客/Rabbit ...
- Spring Boot(十二)集成spring-boot-starter-mail发送邮件
项目GitHub地址 : https://github.com/FrameReserve/TrainingBoot Spring Boot(十二)集成spring-boot-starter-mail发 ...
- 2022 年学习 Spring Boot 开发的最佳书籍
在我们之前的文章中,我们查看了学习 Java 编程的必读书籍我们在其中探索了一些您可以利用的资源来加快 Java 开发的速度.在此基础上,在用 vanilla Java 编写一段时间后,您将意识到组织 ...
- quartz集成到springboot_一个用来学习 spring boot 的开源项目,总共包含 57 个集成demo...
spring-boot-demo 一个用来学习 spring boot 的项目,总共包含 57 个集成demo. 包含集成 actuator(监控).admin(可视化监控).logback(日志). ...
- 窗口消息——Windows核心编程学习手札之二十六
窗口消息 --Windows核心编程学习手札之二十六 Windows允许一个进程至多建立10000个不同类型的用户对象(user object):图符.光标.窗口类.菜单.加速键表等,当一个线程调用一 ...
- 未处理异常和C++异常——Windows核心编程学习手札之二十五
未处理异常和C++异常 --Windows核心编程学习手札之二十五 当一个异常过滤器返回EXCEPTION_CONTINUE_SEARCH标识符时是告诉系统继续上溯调用树,寻找另外的异常过滤器,但当每 ...
- 异常处理程序和软件异常——Windows核心编程学习手札之二十四
异常处理程序和软件异常 --Windows核心编程学习手札之二十四 CPU负责捕捉无效内存访问和用0除一个数值这种错误,并相应引发一个异常作为对错误的反应,CPU引发的异常称为硬件异常(hardwar ...
- 插入DLL和挂接API——Windows核心编程学习手札之二十二
插入DLL和挂接API --Windows核心编程学习手札之二十二 如下情况,可能要打破进程的界限,访问另一个进程的地址空间: 1)为另一个进程创建的窗口建立子类时: 2)需要调试帮助时,如需要确定另 ...
最新文章
- python max函数_Python3
- 用cookie实现保存密码
- MASM5.0汇编环境安装
- git 分支查看与切换
- 【网站】 简单通用微信QQ跳转浏览器打开代码
- Linux设备模型(4)_sysfs
- SpringMVC源码解析 - HandlerAdapter - @SessionAttributes注解处理
- 如何让你产品的用户拥有一流的上传体验
- 记录一个好用的压缩软件 HandBrake
- 1.22.FLINK Watermark\Flink窗口(Window)\watermark有什么用?\如何使用Watermarks处理乱序的数据流?\机制及实例详解\生成方式\代码实例
- 面试笔记:面经-网易考拉
- 硬盘数据丢失如何恢复?
- 分享职场心得《14》
- 增设区域分销商:APC渠道变革拒绝“扁平化”
- Java 访问 HDFS操作
- Java基础(1)-存在指针吗
- 王者荣耀自动化获取金币/经验周上限 教程
- python判断正数和负数教案_正数与负数 优秀教案
- 应用市场建站系统 171cms app下载站源码
- Linux执行命令常用命令4.0
热门文章
- php快速排序实现代码,快速排序的算法php实现
- java opencv安装路径_Java搭建opencv开发环境
- [转载] 多线程详解java.util.concurrent
- scala元组 数组_Scala中的数组
- 不同php文件,php-不同文件夹的不同登录(会话)
- inventor扳手制作视频_弱电工程视频监控系统施工方案,可作施工组织设计
- ibm mq的交互命令模式_IBM的完整形式是什么?
- Python | 如何创建模块(模块示例)?
- stl min函数_std :: min_element()函数以及C ++ STL中的示例
- Linux debian安装PyCharm教程