[Java基础篇]Spring Boot整合MongoDB

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: [Java基础篇]Spring Boot整合MongoDB

[Java基础篇]Spring Boot整合MongoDB


✨博主介绍

前言

MongoDB

CAP定理(CAP theorem)

NoSQL 的优点/缺点

NoSQL 数据库分类

MongoDB整合Spring Boot

在pom.xml添加坐标

添加MyUser实体类

MongoDB常用方法

MongoDB添加方法

MongoDB查询方法

💫点击直接资料领取💫


✨博主介绍

🌊 作者主页:苏州程序大白


🌊 作者简介:🏆CSDN人工智能域优质创作者🥇,苏州市凯捷智能科技有限公司创始之一,目前合作公司富士康、歌尔等几家新能源公司


💬如果文章对你有帮助,欢迎关注、点赞、收藏


💅 有任何问题欢迎私信,看到会及时回复

💅关注苏州程序大白,分享粉丝福利


前言


MongoDB


NoSQL = Not Only ),意即“NoSQL”。


在现代的计算系统上每天网络上都会产生大量的数据量。


1970 年 EFCodd 提出的关系模型的论文“Arelational model of data for large shared databases”,这部分数据有很大一部分关系数据库管理系统(RDBMS)来。简单。


应用非常证明,关系模式适合于客户服务器应用程序,通过范围的利益,今天它是数据在网络和商务应用的目标技术。


NoSQL是全新地的某人性运动早期提出,发展至09年趋势越发高涨。NoSQL的拥护者们覆盖使用2个数据库就关系型的数据存储,相对于铺天数据库的关系型应用,是一种全新的思想的注入。


CAP定理(CAP theorem)


e89909c1cb634d7bb77e6860b19b55d4.png


在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer’s theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:


一致性(Consistency) (所有节点在同一时间具有相同的数据)

可用性(Availability) (保证每个请求不管成功或者失败都有响应)

分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。


因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:


CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。

CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。

AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

NoSQL 的优点/缺点

优点:


高可扩展性

计算计算

标记

架构的,半数据数据

没有复杂的关系

缺点:


没有标准化


有限的查询功能(取消)


最终一致是不喜欢的程序


NoSQL 数据库分类

类型 代表部分 特点

列存储 Hbase Cassandra Hypertable 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

文档存储 MongoDB CouchDB 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。

key-value存储 Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

图存储 Neo4J FlockDB 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。

对象存储 db4o Versant 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

xml数据库 Berkeley DB XML BaseX 高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。

MongoDB整合Spring Boot

在pom.xml添加坐标

 

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


在application文件添加mongodb的配置


spring.data.mongodb.uri=mongodb://106.75.148.160:27017/test


添加MyUser实体类


@Data
@Document("MyUser")
public class MyUser {
 @Id
 private String id;
 private String name;
 private Integer age;
 private String email;
 private String createDate;
}


MongoDB常用方法


mongoTemplate.findAll(MyUser.class): 查询User文档的全部数据


mongoTemplate.findById(, MyUser.class): 查询User文档id为id的数据


mongoTemplate.find(query, MyUser.class):根据query内的查询条件查询


mongoTemplate.upsert(query, update, MyUser.class): 修改


mongoTemplate.remove(query, MyUser.class): 删除


mongoTemplate.insert(User): 新增


MongoDB添加方法


@RequestMapping("testMongoDBAdd")
public String testMongoDBAdd(){
    MyUser myUser = new MyUser();
    myUser.setAge(22);
    myUser.setEmail("123456789@qq.com");
    myUser.setName("苏州程序大白");
    mongoTemplate.insert(myUser);
    return "添加成功";
}


MongoDB查询方法


Query对象


1、创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)。


2、 精准条件:criteria.and(“key”).is(“条件”)模糊条件:criteria.and(“key”).regex(“条件”)。


3、封装条件:query.addCriteria(criteria)。


4、大于(创建新的criteria):Criteria gt = Criteria.where(“key”).gt(“条件”)小于(创建新的criteria):Criteria lt = Criteria.where(“key”).lt(“条件”)。


5、Query.addCriteria(new Criteria().andOperator(gt,lt))。


6、一个query中只能有一个andOperator()。其参数也可以是Criteria数组。


7、排序 :query.with(new Sort(Sort.Direction.ASC, “age”). and(new Sort(Sort.Direction.DESC, “date”)))。


查询方法


@RequestMapping("testMongoDBfindAll")
public String  testMongoDBfindAll(){
    List<MTest> mTests = mongoTemplate.findAll( MTest.class);
    System.out.println("mTests="+mTests);
    return "查询成功";
}


根据ID查询


@RequestMapping("testMongoDBfindById")
public String  testMongoDBfindById(){
    MyUser myUser = mongoTemplate.findById("", MyUser.class);
    System.out.println("myUser="+myUser);
    return "查询成功";
}


条件查询


@RequestMapping("testMongoDBCriteria")
public String  testMongoDBCriteria(){
    Query query = new Query();
    Criteria criteria = Criteria.where("name").is("苏州程序大白");
    query.addCriteria(criteria);
    List<MyUser> myUsers = mongoTemplate.find(query, MyUser.class);
    System.out.println("mTests="+myUsers);
    return "查询成功";
}


模糊查询


//模糊查询
public void findUsersLikeName() {
    String name = "est";
    String regex = String.format("%s%s%s", "^.*", name, ".*$");
    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    Query query = new Query(Criteria.where("name").regex(pattern));
    List<User> userList = mongoTemplate.find(query, User.class);
    System.out.println(userList);
}


分页查询


//分页查询
public void findUsersPage() {
    String name = "est";
    int pageNo = 1;
    int pageSize = 10;
    Query query = new Query();
    String regex = String.format("%s%s%s", "^.*", name, ".*$");
    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    query.addCriteria(Criteria.where("name").regex(pattern));
    int totalCount = (int) mongoTemplate.count(query, User.class);
    List<User> userList = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);
    Map<String, Object> pageMap = new HashMap<>();
    pageMap.put("list", userList);
    pageMap.put("totalCount",totalCount);
    System.out.println(pageMap);
}


修改方法


//分页查询
public void findUsersPage() {
    String name = "est";
    int pageNo = 1;
    int pageSize = 10;
    Query query = new Query();
    String regex = String.format("%s%s%s", "^.*", name, ".*$");
    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    query.addCriteria(Criteria.where("name").regex(pattern));
    int totalCount = (int) mongoTemplate.count(query, User.class);
    List<User> userList = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);
    Map<String, Object> pageMap = new HashMap<>();
    pageMap.put("list", userList);
    pageMap.put("totalCount",totalCount);
    System.out.println(pageMap);
}


删除方法


//删除操作
@RequestMapping("TestMongoDBDelete")
public void TestMongoDBDelete() {
    Query query =
    new Query(Criteria.where("_id").is("5ff45642ac290f356edf9b5aa"));
    DeleteResult result = mongoTemplate.remove(query, MyUser.class);
    long count = result.getDeletedCount();
    System.out.println(count);
}



相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
打赏
0
0
0
0
9
分享
相关文章
|
1月前
|
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
74 1
基于Java 17 + Spring Boot 3.2 + Flink 1.18的智慧实验室管理系统核心代码
这是一套基于Java 17、Spring Boot 3.2和Flink 1.18开发的智慧实验室管理系统核心代码。系统涵盖多协议设备接入(支持OPC UA、MQTT等12种工业协议)、实时异常检测(Flink流处理引擎实现设备状态监控)、强化学习调度(Q-Learning算法优化资源分配)、三维可视化(JavaFX与WebGL渲染实验室空间)、微服务架构(Spring Cloud构建分布式体系)及数据湖建设(Spark构建实验室数据仓库)。实际应用中,该系统显著提升了设备调度效率(响应时间从46分钟降至9秒)、设备利用率(从41%提升至89%),并大幅减少实验准备时间和维护成本。
56 0
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
59 0
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
130 0
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
295 4
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
669 37
java基础面试题
java基础面试题
61 2

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问