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无法访问…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
P10909 [蓝桥杯 2024 国 B] 立定跳远
# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时࿰…...