简介

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

其实对MongoDB更详细的介绍我前两章有写,如果有兴趣可以看看

今日内容:

  • MongoTemplent实现增删改查

正文

第一步 导入pom文件、配置yml文件

pom文件

<!--    springBoot需要的依赖--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.1.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.18</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.4.1</version></dependency><!--        test--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies>

yml配置文件

spring:data:mongodb:uri: mongodb://guyong:123456@localhost:27017/lx#uri:mongodb://用户名:密码@主机地址:端口号/集合
server:port: 8899#设置端口号

第二步 编写实体类、启动类

启动类

@SpringBootApplication
public class ApplicationMongoDB {public static void main(String[] args) {SpringApplication.run(ApplicationMongoDB.class);}
}

实体类


@Document("emp")  //指定操作哪个集合
@Data   //省略get set方法
@AllArgsConstructor  //省略需要传参的构造器
@NoArgsConstructor  //省略无参构造器
public class Employee {@Id  //定义在主键上private Integer id;@Field("username")  //起别名private String name;private int age;private Double salary;private Date birthday;
}
  • @Document(collection=“article”) 表示指定该类操作哪个集合

  • @CreatedDate注解,和jpa用法一样,创建时会自动赋值,需要在启动类上添加@EnableMongoAuditing

  • @Field注解,可以指定存储的键值对名称,默认是类字段名,如果设置了Field就是以括号中的名字为字段名

  • @Id主键,不可重复,自带索引,可以在定义的列名上标注,需要自己生成并维护不重复的约束,如果自己不设置@Id主键,mongo会自动生成一个唯一主键,并且插入时效率远高于自己设置主键

  • @Indexed声明该字段需要加索引,加索引后以该字段为条件检索将大大提高速度,唯一索引@Indexed(unique=true)

第三步 编写Dao层

条件查询

public Query() {  查询所有
}public Query(CriteriaDefinition criteriaDefinition) { 定义标准条件this.addCriteria(criteriaDefinition);
}

增加数据

@Component
public class Insert {@Autowiredprivate MongoTemplate mongoTemplate;/*** 插入单条数据*/public void testInsert(){Employee employee = new Employee(1, "小明", 30, 1000.00, new Date());//添加文档
//        save:_id存在是更新数据,不会抛出异常
//        public <T> T save(T objectToSave)mongoTemplate.save(employee);
//        insert: _id存在会抛出异常  支持批量操作mongoTemplate.insert(employee);}/*** 插入多条数据*/public void testInsert2(){List<Employee> list = Arrays.asList(new Employee(2, "张三", 30, 1000.00, new Date()),new Employee(3, "李四", 25, 1000.00, new Date()),new Employee(4, "王五", 18, 1000.00, new Date()),new Employee(5, "赵六", 54, 1000.00, new Date()),new Employee(6, "田七", 44, 1000.00, new Date()));mongoTemplate.insert(list,Employee.class);}
}

修改数据

@Component
public class Updates {@Autowiredprivate MongoTemplate mongoTemplate;/*** 更新满足条件的第一条数据,返回值是long类型的更新条数* @return*/public long testUpdate(){Query query = new Query(Criteria.where("age").gte(20));Update update = new Update();update.set("salary",520);
//        updateFirst() 只更新满足条件的第一条记录UpdateResult updateResult = mongoTemplate.updateFirst(query, update, Employee.class);long modifiedCount = updateResult.getModifiedCount();return modifiedCount;}/*** 更新所有满足条件的数据* @return*/public long testUpdate2(){Query query = new Query(Criteria.where("age").gte(20));Update update = new Update();update.set("salary",888);UpdateResult updateResult = mongoTemplate.updateMulti(query, update, Employee.class);long modifiedCount = updateResult.getModifiedCount();return modifiedCount;}/*** 没有符合条件的记录则插入数据* @return*/public long testUpdate3(){Query query = new Query(Criteria.where("age").is(1));Update update = new Update();update.set("age",18).set("name","王麻子");UpdateResult upsert = mongoTemplate.upsert(query, update, Employee.class);return upsert.getModifiedCount();}public int testUpdate4(){Query query = new Query(Criteria.where("student").is("1101"));Update update = new Update();
//        inc对一个数值进行增加或者减少的操作update.inc("language",1);FindAndModifyOptions options = new FindAndModifyOptions();
//        返回实体的新状态options.returnNew(true);Grade grade = mongoTemplate.findAndModify(query, update, options, Grade.class);return grade.getLanguage();}
}

查找数据

@Component
public class Refer {@Autowiredprivate MongoTemplate mongoTemplate;/*** 查询所有数据* @return*/public List<Employee> testFind(){List<Employee> all = mongoTemplate.findAll(Employee.class);return all;}/*** 根据ID查询* @return*/public Employee testFindById(){Employee byId = mongoTemplate.findById(1, Employee.class);return byId;}/*** 返回条件查询的第一个文档* @return*/public Employee testFindOne(){//        new Query()表示没有条件Employee one = mongoTemplate.findOne(new Query(), Employee.class);return one;}/*** 查询age大于18,小于30的员工信息* @return*/public List<Employee> Q1(){//        where(String key) 表示你查询的对应是哪个key 后面跟上值Query q = new Query(Criteria.where("age").gt(18).lt(30));List<Employee> employees = mongoTemplate.find(q, Employee.class);return employees;}/*** 正则查询(模糊查询)* java中正则不需要//* @return*/public List<Employee> Q2(){Query query = new Query(Criteria.where("username").regex("张"));List<Employee> employees = mongoTemplate.find(query, Employee.class);return employees;}/*** 多条件查询* @return*/public List<Employee> Q3(){Criteria c = new Criteria();
//       orOperator():or连接多个条件
//        andOperator:and可以传入多个条件c.andOperator(Criteria.where("age").gt(18), Criteria.where("username").regex("六"));Query query = new Query(c);return mongoTemplate.find(query, Employee.class);}/*** 排序查询* @return*/public List<Employee> Q4(){Query query = new Query();query.with(Sort.by(Sort.Order.desc("age")));return mongoTemplate.find(query,Employee.class);}/*** 分页查询*/
//    skip() 指定跳过记录数
//    limit() 限定返回的结果条数public List<Employee> Q5(){Query query = new Query();query.skip(0).limit(3);return mongoTemplate.find(query,Employee.class);}/*** 使用json字符串查询* @return*/public List<Employee> FindByJson(){//        username 和 name都可以
//        等值查询
//        String json ="{name:'王五'}";//gt 大于    gte大于等于String json = "{$or:[{age:{$gt:25}},{salary:{$gte:1000}}]}";Query query = new BasicQuery(json);List<Employee> employees = mongoTemplate.find(query, Employee.class);return employees;}
}

删除数据

@Component
public class Delete {@Autowiredprivate MongoTemplate mongoTemplate;/*** 删除指定条件的数据* @return*/public long testDelete(){Query query = new Query(Criteria.where("age").gte(25));DeleteResult remove = mongoTemplate.remove(query, Employee.class);return  remove.getDeletedCount();}/*** 删除所有数据*/public void testDelete2(){//        直接删除集合mongoTemplate.dropCollection(Employee.class);//        删除所有数据,但是这个是一条条数据删除,效率没有上面的高
//        mongoTemplate.remove(new Query(),Employee.class);}}

编写 controller层

@RequestMapping("/test")
@RestController
public class TestController {@Autowiredprivate Insert insert;@Autowiredprivate Refer refer;@GetMapping("/i1")public void save(){insert.testInsert();}@GetMapping("/i2")public void insert(){insert.testInsert2();}@GetMapping("/r1")public List<Employee> find(){return refer.testFind();}@GetMapping("/r2")public Employee findById(){return refer.testFindById();}@GetMapping("/r3")public Employee findOne(){return refer.testFindOne();}@GetMapping("/r4")public List<Employee> findQ1(){return refer.Q1();}@GetMapping("/r5")public List<Employee> findQ2(){return refer.Q2();}@GetMapping("/r6")public List<Employee> findQ3(){return refer.Q3();}@GetMapping("/r7")public List<Employee> findQ4(){return refer.Q4();}@GetMapping("/r8")public List<Employee> findQ5(){return refer.Q5();}@GetMapping("/r9")public List<Employee> findQ6(){return refer.FindByJson();}
}
@RequestMapping("/test2")
@RestController
public class TestController2 {@Autowiredprivate Updates updates;@Autowiredprivate Delete delete;@GetMapping("/u1")public long test1(){return updates.testUpdate();}@GetMapping("/u2")public long test2(){return updates.testUpdate2();}@GetMapping("/u3")public long test3(){return updates.testUpdate3();}@GetMapping("/u4")public int test4(){return updates.testUpdate4();}@GetMapping("/d1")public long del1(){return  delete.testDelete();}@GetMapping("/d2")public void del2(){delete.testDelete2();}
}

结尾

本文的笔记可能需要兄弟们自己整理了,我一般把方法的注释都写在代码上,需要兄弟们自己跟着敲一遍整理一下笔记了

SpringBoot整合MongoDB,MongoTemplent的使用(3)相关推荐

  1. 直接裂开!京东二面被问SpringBoot整合MongoDB,我不会啊

    开始进入正题 一.技术介绍 SpringBoot整合MongoDB的实现步骤 一.技术介绍 1.MongoDB是什么? 二.使用步骤 1.MongoDB是什么? MongoDB(来自于英文单词&quo ...

  2. SpringBoot整合MongoDB 及 基本使用

    目录 1.MongoDB基本介绍 2.MongoDB的特点 3.MongoDB的体系结构 4.MongoDB的数据类型 5.SpringBoot整合MongoDB ** 1.导入依赖 2.启动Mong ...

  3. SpringBoot整合MongoDB数据库并实现基础CRUD

    MongoDB安装教程:MongoDB数据库安装以及将MongoDB设置为系统服务 MongoDB简介 MongoDB是一个基于分布式文件存储的数据库,由C++语言编写.旨为WEB应用提供可扩展的高性 ...

  4. 【ReactJs+springBoot项目——租房】第6章:MongoDB入门+SpringBoot整合MongoDB+搭建微聊系统+实现微聊功能

    MongoDB入门 MongoDB的java api的使用 SpringBoot整合MongoDB使用 搭建微聊系统 实现微聊功能 分布式WebSocket解决方案分析 1.MongoDB入门 1.1 ...

  5. Spring-Boot 整合MongoDB

    Spring-Boot 整合MongoDB 一.引入MongoDB依赖 <dependency><groupId>org.springframework.boot</gr ...

  6. SpringBoot整合Mongodb(三) 使用MongoTemplate进行连表查询

    SpringBoot整合Mongodb(三) 使用MongoTemplate进行连表查询 由于在实际开发项目中,突然涉及到了需要Mongodb 进行连表操作的业务,所以我在私下进行了一波学习. 服务器 ...

  7. springboot 整合 mongodb Criteria类 查询条件大全

    关于springboot整合mongodb,可查看博文 https://blog.csdn.net/qq_41712271/article/details/116062611 import cn.hu ...

  8. SpringBoot 整合mongoDB实现文章存储

    本项目展示了 SpringBoot 整合mongoDB进行文章存储,并实现简单增删改查,关于docker安装MongoDB:Docker 安装 MongoDB_Michael-DYZ的博客-CSDN博 ...

  9. SpringBoot第八篇:springboot整合mongodb

    这篇文章主要介绍springboot如何整合mongodb. 准备工作 安装 MongoDB jdk 1.8 maven 3.0 idea 环境依赖 在pom文件引入spring-boot-start ...

最新文章

  1. 【组队学习】【32期】SQL编程语言
  2. Spring Cloud第八篇:Spring Cloud Bus刷新配置
  3. 有关[Http持久连接]的一切,卷给你看
  4. diskgenius 接触“只读“失败_相亲总是失败,这三个步骤你都做了吗?
  5. HTTP的⼏种请求⽅法及⽤途小谈(面试)
  6. mysql account locked_ORA-28000: the account is locked用户锁定问题排查解决
  7. php 扫描仪对接,Mac_Mac怎么连接扫描仪?苹果电脑Mac添加扫描仪教程,  有很多的用户需要用到扫 - phpStudy...
  8. poj_3628 动态规划
  9. CentOS 7 x64部署tomcat
  10. paip. 混合编程的实现resin4 (自带Quercus ) 配置 php 环境
  11. 暑期作息时间表模板_小学生暑假作息时间表模板
  12. 灵飞经 ①洪武年间 第一章金陵歌舞
  13. 混合现实在医学领域的应用学习日志
  14. 图解ArcGIS数据三维显示
  15. Android开发之摇一摇
  16. MIUI打开相册怎么默认显示全部照片_小米手机让相册默认展示所有图片怎么设置?
  17. onepunch的wp
  18. 对前端工程化、模块化、组件化开发的理解
  19. 阿里云导出负载均衡SLB实例数据
  20. 汽车MEMS传感器应用及发展

热门文章

  1. 使用Folium制作相册地图
  2. 2019第十届蓝桥杯大赛青少年创意编程省赛C++组试题解析
  3. 最新版抖音app或者其他app抓包情况分析
  4. Aptos、Solana和新公链周期律
  5. 一道智力游戏趣味编程题
  6. 好用的PDF转换PPT软件推荐
  7. Android手机收不到短信
  8. 获取SQLServer连接字符串的方法
  9. 《新参者》——东野圭吾
  10. 公基计算机快捷键,专业知识—计算机常用快捷键操作大全