SpringBoot简单使用MongoDB
MongoDB介绍
SpringBoot简单使用MongoDB
一、配置步骤
1、application.yml
2、pom
3、entity
4、mapper
二、案例代码使用
1、库
前期准备上一篇安装MongoDB地址http://t.csdn.cn/G4oYJ
跟关系型数据库概念对比
Mysql MongoDB
Database(数据库) Database(数据库)
Table(表) Collection(集合)
Row(行) Document(文档)
Column(列) Field(字段)
数据格式
MongoDB 将数据存储为一个文档,BSON格式。由key 和 value组成。
{"_id" : ObjectId("61d6927658c3b5acf4723616"),"name" : "希望小学","studentNum" : 10000.0
}
使用场景
大数据量存储场景
MongoDB自带副本集和分片,天生就适用于大数量场景,无需开发人员通过中间件去分库分表,非常方便。
操作日志存储
很多时候,我们需要存储一些操作日志,可能只需要存储比如最近一个月的,一般的做法是定期去清理,在MongoDB中有固定集合的概念,我们在创建集合的时候可以指定大小,当数据量超过大小的时候会自动移除掉老数据。
爬虫数据存储
爬下来的数据有网页,也有Json格式的数据,一般都会按照表的格式去存储,如果我们用了MongoDB就可以将抓下来的Json数据直接存入集合中,无格式限制。
社交数据存储
在社交场景中使用 MongoDB 存储存储用户地址位置信息,通过地理位置索引实现附近的人,附近的地点等。
电商商品存储
不同的商品有不同的属性,常见的做法是抽出公共的属性表,然后和SPU进行关联,如果用MongoDB的话那么SPU中直接就可以内嵌属性。
CRUD
单个文档插入到集合中
db.collection.insertOne()
多个文档插入到集合中
db.collection.insertMany()
单个或者多个文件插入到集合中
db.collection.insert()
查询数据
db.collection.find( )
更新单条
db.inventory.updateOne()
更新多条
db.inventory.updateMany()
删除单条文档
db.inventory.deleteOne( )
删除多条文档
db.inventory.deleteMany()
开发工作必用
MongoDB跟Mysql的语法对比
https://blog.csdn.net/qq_42483764/article/details/122350164
MongoDB基础操作
db.集合名称.insert/save/insertOne(文档) //添加
db.集合名称.update({条件},{操作种类:{文档}})
db.集合名称.remove(条件)
示例:
db.book.save({'name':'spring boot',type:'spring boot'}) //添加
db.book.remove({type:'spring boot'}) //删除//修改第一条
db.book.update({name:'spring boot'}, {$set:{name:'Spring Boot'}})
//修改所有
db.book.updateMany({name:'spring boot'}, {$set:{type:'spring'}})
db.getCollection('book').find({}) //查询
db.book.find({type:'spring boot'}) //查询
定义核心配置文件
# 登录用户所在的数据库
spring.data.mongodb.authentication-database=admin# 数据库的ip地址
spring.data.mongodb.host=192.168.133.142# MongoDB端口号
spring.data.mongodb.port=27017# 用户账号
spring.data.mongodb.username=zlfeng# 用户密码
spring.data.mongodb.password=123456# 指定使用的数据库
# 不必预先创建,不存在该数据库会自动创建
spring.data.mongodb.database=db_student
修改yml配置
spring:data:mongodb:#192.168.217.128根据自己的ip进行修改#test是MongoDB的集合名称 也就是表名
添加实体类
@Data
@AllArgsConstructor
@Document("User") //指定了这个模型类型所对应的集合名称即collection 表名
public class User {@Id //自动生成的主键ID 主键 不可重复 自带索引private String id;private String name;private Integer age;
}
方法测试
@SpringBootTest
public class MongoTemplateTest {@Autowiredprivate MongoTemplate mongoTemplate;@Testpublic void testMongoDB(){//向表中插入数据User user = new User(null,"张三",20);User user1 = new User(null,"李四",16);mongoTemplate.insert(user);mongoTemplate.insert(user1);//查询表中所有记录List<User> userList = mongoTemplate.findAll(User.class);System.out.println(userList);//[User(id=63acf541e6af652ac74fd008, name=张三, age=20),// User(id=63acf541e6af652ac74fd009, name=李四, age=16)]//根据表中id查询记录User user2 = mongoTemplate.findById("63acf541e6af652ac74fd008", User.class);System.out.println(user2);//User(id=63acf541e6af652ac74fd008, name=张三, age=20)//条件查询Query query = new Query(Criteria.where("name").is("李四").and("age").is(16));List<User> users = mongoTemplate.find(query, User.class);System.out.println(users);//[User(id=63acf541e6af652ac74fd009, name=李四, age=16)]//根据_id删除表中记录Query query2 = new Query(Criteria.where("_id").is("63acf541e6af652ac74fd008"));DeleteResult remove = mongoTemplate.remove(query2, User.class);//获取删除记录的个数long count = remove.getDeletedCount();System.out.println(count);//1//删除表中所有数据Query query3 = new Query();mongoTemplate.remove(query3,User.class);}
}
二、基于MongoRepository开发
Spring Data提供了对MongoDB数据访问的支持,我们只需要继承MongoRepository类,按照Spring Data规范就可以了。
构建仓库
public interface UserRepository extends MongoRepository<User,String> {
}
方法测试
@SpringBootTest
public class MongoRepositoryTest {@Autowiredprivate UserRepository userRepository;@Testpublic void test(){//向数据库表中插入数据User user = new User(null,"张三三",18);User user1 = new User(null,"李四",16);userRepository.save(user);userRepository.save(user1);//查询数据库表中所有记录List<User> all = userRepository.findAll();System.out.println(all);//[User(id=63acf24938e0d1033d50dc20, name=张三三, age=18),// User(id=63acf24938e0d1033d50dc21, name=李四, age=16)]//按照id查询表中数据User user2 = userRepository.findById("63acf24938e0d1033d50dc20").get();System.out.println(user2);//User(id=63acf24938e0d1033d50dc20, name=张三三, age=18)//按条件(姓名与年龄)查询Example<User> example = Example.of(new User(null,"李四",16));List<User> list = userRepository.findAll(example);System.out.println(list);//User(id=63acf24938e0d1033d50dc21, name=李四, age=16)//模糊查询User user3 = new User(null,"三",18);//模糊查询匹配规则ExampleMatcher matcher = ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING).withIgnoreCase(true);//忽略大小写Example<User> example1 = Example.of(user3,matcher);List<User> list1 = userRepository.findAll(example1);System.out.println(list1);//User(id=63acf24938e0d1033d50dc20, name=张三三, age=18)//分页查询Pageable pageable = PageRequest.of(0, 2);//设置分页参数:第1页 每页2条数据Page<User> page = userRepository.findAll(pageable);System.out.println("Page的总页数是:" + page.getTotalPages() + ",Page的总记录条数是:" + page.getTotalElements());//Page的总页数是:1 + ,Page的总记录条数是:2//根据_id修改信息User user4 = userRepository.findById("63acf24938e0d1033d50dc20").get();user4.setName("王五");//将取出的信息修改其nameuserRepository.save(user4);//根据id删除userRepository.deleteById("63acf24938e0d1033d50dc20");//删除全部userRepository.deleteAll();}
一、配置步骤
进入mongodb中创建数据库和用户
# (1)授权
# 我的管理员是root,密码是123456
db.auth("root", "123456")# (2)创建应用数据库和用户
# 连接库直接使用相应库中的用户名称即可,如果仅仅使用appdb库,直接使用user=appdb,pwd=123456连接即可
use appdb
db.createUser({user:'appdbuser', pwd:'123456', roles:[ {role:'dbOwner', db:'appdb'} ]})
1、application.yml
#数据库配置
spring:data:mongodb:# mongodb://用户名:密码@IP地址:27017/数据库uri: mongodb://appdbuser:123456@127.0.0.1:27017/appdb# 可以不用设置数据库# database: appdb
2、pom
org.springframework.boot spring-boot-starter-data-mongodb3、entity
@Document("book")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {@Idprivate Long id;private String title;private Integer page;
}
4、mapper
@Repository
public interface BookDao extends MongoRepository<Book, Integer> {
}
二、案例代码使用
@SpringBootTest
@Slf4j
class MymongoApplicationTests {@Autowiredprivate BookDao bookDao;@Testvoid contextLoads() {// 插入多条数据Book book1 = new Book(2L, "China", 8);Book book2 = new Book(3L, "American", 8);ArrayList<Book> bookArrayList = Lists.newArrayList();bookArrayList.add(book1);bookArrayList.add(book2);bookDao.saveAll(bookArrayList);// 查询一条数据Book book3 = new Book();book3.setTitle("American");Example<Book> example = Example.of(book3);Optional<Book> one = bookDao.findOne(example);log.info(one.get().toString());//Book(id=3, title=American, page=8)}
}
操作集合下的文档
- 切换至集合
连接至具体数据库以后,使用以下代码切换到集合,如果集合不存在,则使用如下代码新建集合:
MongoCollection collection = database.getCollection("myTestCollection");
- 插入文档
切换至集合后,就可以进行文档的增、删、改、查操作。首先定义文档,并使用 append。方法追加内容,代码如下:
Document document = new Document("_id", 1999).append("title", "MongoDB Insert Demo").append("description","database").append("likes", 30).append("by", "demo point").append("url", "http://c.biancheng.net/mongodb/");
document 为 BSON 类型的文档,实际上为一个列表,每项有两个元素,即字段名和值。
文档定义完成后,再使用 insertOne 方法将此文档插入集合:
collection.insertOne(document);
如果插入多条数据,需要先定义一个 Document 列表,然后用 add() 方法添加多个 Document 元素,最后用 insertMany() 方法插入,代码如下:
List<Document> documents = new ArrayList<Document>();documents.add(document1);collection.insertMany(documents);
- 删除文档
使用 delete() 方法删除一个或多个文档,代码如下:
collection.deleteOne(document);collection.deleteMany(new Document ("likes", 30));
- 更新数据
使用 updataOne() 方法更新一条数据或多个数据,代码如下:
collection.updataOne (eq ("likes", 30), new Document ("$set", new Document ("likes", 50)));
updateOne() 方法中有两个参数,第一个参数表示更新的内容等于 (“likes”,30) 的文档,第二个参数为要修改的内容,使用 $set 参数修改当前值,修改的内容为 (“likes”, 50)。
- 查询数据
利用游标类型实现数据的查询和遍历显示,使用游标前需要 import MongoCursor 类库。
import com.mongodb.client.MongoCursor;document Doc = (Document)collection.find(eq("likes", 30)).iterator();MongoCursor<Document> cursor =collection.find().iterator();try{while (cursor.hasNext()){System.out.printin(cursor.next().toJson());}} finally{Cursor.close();
}
设置 find() 方法的参数为查询条件,参数为比较的 Document 元素。
- 其他方法
删除数据库或集合,代码如下:
mDatabase.drop();collection.drop();
关闭客户端连接,代码如下:
mongoClient.close();
相关文章:
SpringBoot简单使用MongoDB
MongoDB介绍 SpringBoot简单使用MongoDB 一、配置步骤 1、application.yml 2、pom 3、entity 4、mapper 二、案例代码使用 1、库 前期准备上一篇安装MongoDB地址http://t.csdn.cn/G4oYJ 跟关系型数据库概念对比 Mysql MongoDB Database(数据库) Datab…...
Oracle Data Guard 角色转换(Role Transitions)
查询视图V$DATABASE的DATABASE_ROLE列可以看到数据库当前的角色。 1.角色转换介绍 Oracle Data Guard让你可以使用SQL语句或者通过Oracle Data Guard broker界面来动态更改数据库的角色,Oracle Data Guard支持以下的角色转换: 1࿰…...
opencv的TrackBar控件
大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...
关于基线长度对双天线GNSS测姿精度的影响
文章目录一、GNSS测姿原理1. 载波相位双差求解基线向量2. GNSS姿态角表示二、基线长度对GNSS测姿精度的影响三、GNSS定向产品精度描述实例四、参考文献在GNSS定向模块或者板卡的指标参数中,我们一般会看到航向的测量精度和基线的长度相关。在实际使用,用…...
口交换机睿易 RG-NBS1826GC 24 口
接口形态不将就,标配光纤接口传输性能不将就,标配千兆上联口和大缓存设计端口数量不将就,8/16/24 三种选择楼宇对讲交换机不将就,保证开锁指令品质服务不将就,监控专用交换机接口形态不将就,标配光纤接口非…...
如何在Excel中向下拉列表中添加条件
在Excel中向下拉列表中添加条件 创建矩阵型数据集创建下拉列表创建第一个下拉列表创建第二个下拉列表你可以使用Microsoft Excel下拉列表来显示一个简单的列表,尽管有时需要更多的控制。假设你的人员分散在四个地区:北部、南部、东部和西部。你希望按地区与人员合作,而不是与…...
自定义bean 加载到spring IOC容器中
自定义bean加载到spring容器中的两种方式: 1.在类上添加注解Controller、RestController(本质是Controller)、Service、Repository、Component2.使用Configuration和Bean 这篇文章主要介绍第二种方式原理(因为在实际使用中&#…...
[python入门㊻] - python装饰器和类的装饰器
目录 ❤ python装饰器介绍 ❤ 什么是装饰器 ❤ 装饰器的流程 ❤ 定义装饰器时通常会涉及以下3个函数 无参装饰器 有参装饰器 多重装饰器 ❤ 装饰器的用法(闭包) ❤ 装饰器语法糖 ❤ 时间计时器 ❤ 装饰器中wraps作用 不使用wraps装饰器 使用wraps装饰器解…...
企业级信息系统开发学习1.1 初识Spring——采用Spring配置文件管理Bean
文章目录一、Spring容器演示——采用Spring配置文件管理Bean(一)创建Maven项目(二)添加Spring依赖(三)创建杀龙任务类(四)创建勇敢骑士类(五)采用传统方式让勇…...
CSS盒子模型
盒子模型 CSS三大特性 继承性、层叠性、优先级 优先级比较 继承 < 通配符选择器 < 标签选择器 < 类选择器 < id选择器 < 行内样式 < !important 注意:!important不能提升继承的优先级,只要是继承优先级最低 复合选择器权重叠加计…...
Python基础学习笔记 —— 数据结构与算法
数据结构与算法1 数据结构基础1.1 数组1.2 链表1.3 队列1.4 栈1.5 二叉树2 排序算法2.1 冒泡排序2.2 快速排序2.3 (简单)选择排序2.4 堆排序2.5 (直接)插入排序3 查找3.1 二分查找1 数据结构基础 本章所需相关基础知识:…...
笔记本连接wifi,浏览器访问页面,显示访问被拒绝
打开chrome、edge浏览器访问第1个第2个页面正常,后面再打开页面显示异常。 但手机连接正常,笔记本连接异常,起初完全没有怀疑是wifi问题 以为用了vpn软件问题,认为中了病毒。杀毒,并没有中毒。 1、关闭vpn代理&#…...
36个物联网专业毕业论文选题推荐
物联网技术在智能家居系统中的应用研究物联网在智慧城市建设中的作用物联网在工业4.0中的实现与发展 物联网与智能物流系统的结合物联网与医疗健康领域的融合研究物联网与环境监测系统的集成物联网与农业生产的结合研究物联网技术对汽车行业的影响与发展物联网在智能安防领域的…...
Pytorch复习笔记--torch.nn.functional.interpolate()和cv2.resize()的使用与比较
1--前言 博主在处理图片尺度问题时,习惯使用 cv2.resize() 函数;但当图片数据需用显卡加速运算时,数据需要在 GPU 和 CPU 之间不断迁移,导致程序运行效率降低; Pytorch 提供了一个类似于 cv2.resize() 的采样函数&…...
ASP.NET Core MVC 项目 AOP之ActionFilterAttribute
目录 一:说明 二:实现ActionFilterAttribute父类 一:说明 ActionFilterAttribute比前两者简单方便,易于扩展,不易产生代码冗余。 ActionFilterAttribute过滤器执行顺序: 1:执行控制器中的构造函数,实例化控制器 2:执行ActionFilterAttribute.OnActionExecutionA…...
浅析EasyCVR安防视频能力在智慧小区建设场景中的应用及意义
一、行业需求 城市的发展创造了大量工作机会,人口的聚集也推动了居民住宅建设率的增长。人民生活旨在安居乐业,能否住得“踏实”是很多劳动工作者最关心的问题。但目前随着住宅小区规模的不断扩大、人口逐渐密集,在保证居住环境舒适整洁的同…...
Python的深、浅拷贝到底是怎么回事?一篇解决问题
嗨害大家好鸭!我是小熊猫~ 一、赋值 Python中, 对象的赋值都是进行对象引用(内存地址)传递, 赋值(), 就是创建了对象的一个新的引用, 修改其中任意一个变量都会影响到另一个 will …...
TCP协议十大特性
日升时奋斗,日落时自省 目录 1、确认应答 1.1、序号编辑 2、超时重传 3、连接管理 3.1、三次握手 3.2、四次挥手 4、滑动窗口 5、流量控制 6、拥塞控制 7、延时应答 8、捎带应答 9、面向字节流 10、异常情况 TCP协议: 特点:有…...
2.14作业【GPIIO控制LED】
设备树 myleds{ myled1 <&gpioe 10 0>; myled2 <&gpiof 10 0>; myled3 <&gpioe 8 0>; }; 驱动代码 #include<linux/init.h> #include<linux/module.h> #include<linux/of.h&…...
5min搞定linux环境Jenkins的安装
5min搞定linux环境Jenkins的安装 安装Jenkinsstep1: 使用wget 命令下载Jenkinsstep2、创建Jenkins日志目录并运行jekinsstep3、访问jenkins并解锁jenkins,安装插件以及创建管理员用户step4、到此,就完成了Finish、以上步骤中遇到的问题1、 jenkins启动不了2、jenkins无法访问…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
