MongoDB学习笔记【part4】SpringBoot集成MongoDB、MongoTemplate开发CURD
创始人
2024-05-15 05:56:00
0

一、Spring Boot 集成 Mongodb

spring-data-mongodb 提供了 MongoTemplateMongoRepository 两种方式访问mongodb,MongoRepository 操作简单,但 MongoTemplate 更加灵活,我们在项目中可以灵活使用这两种方式操作mongodb。

第一步,引入依赖
org.springframework.bootspring-boot-starter-data-mongodborg.springframework.bootspring-boot-starter-weborg.projectlomboklombokjoda-timejoda-time2.10.1org.springframework.bootspring-boot-starter-testtestorg.junit.vintagejunit-vintage-engine

第二步,配置 application.properties
spring.data.mongodb.uri=mongodb://192.168.3.100:27017/testdb
第三步,添加实体

添加 @Document 注解,可以把一个实体类映射成一个文档。

添加 @Id 注解,将该属性映射为 mongodb 的 _id 字段。

@Data
@Document("User")
public class User {@Idprivate String id;private String name;private Integer number;private String position;}
第四步,启动容器和MongoDB客户端
  1. 若没有安装 mongodb 的镜像,则需要安装镜像,然后执行 docker run <容器名称> 创建一个 mongo 容器,带端口号和其他具体配置的创建请参考 MongoDB学习笔记【part1】概念与安装 。
  2. 若之前已经创建,则跳过上一步,直接执行 docker start <容器名称> 来启动之前停止运行的容器。
  3. 启动后执行 docker exec -it <数据库名称> /bin/bash 以守护模式进入容器终端。
  4. 接着执行 mongosh 进入 mongoDB 客户端。
第五步,添加测试类
@SpringBootTest
class MongodemoApplicationTests {@Autowiredprivate MongoTemplate mongoTemplate;/*** 1.添加*/@Testpublic void createUser(){User user = new User();user.setName("parker");user.setNumber(7);user.setPosition("striker");User insert_user = mongoTemplate.insert(user);System.out.println(insert_user);}}
第六步,测试成功

template会返回带 _id 的新实体:

User(id=63cba6483a54a937e410d3bd, name=parker, number=7, position=striker)
到 linux 上查看,插入成功。

在这里插入图片描述


二、MongoTemplate 的常用方法

方法说明
mongoTemplate.findAll(User.class);查询User文档的全部数据
mongoTemplate.findById(, User.class);查询User文档id为的数据
mongoTemplate.find(query, User.class);根据query内的查询条件查询
mongoTemplate.upsert(query, update, User.class);修改
mongoTemplate.remove(query, User.class);删除
mongoTemplate.insert(User);新增
Qurey 对象

基本使用方法:创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)。

方法说明
criteria.and(“key”).is(“条件”);精准条件
criteria.and(“key”).regex(“条件”);模糊条件
query.addCriteria(criteria);封装条件
Criteria gt = Criteria.where(“key”).gt(“条件”);大于(需创建新的criteria)
Criteria lt = Criteria.where(“key”).lt(“条件”);小于(需创建新的criteria)
query.addCriteria(new Criteria().andOperator(gt,lt));封装大于、小于条件
query.with(new Sort(Sort.Direction.ASC, “age”). and(new Sort(Sort.Direction.DESC, “date”)))排序

注:一个query中只能有一个 andOperator() ,若要传多个参数可以传入Criteria数组。


三、使用 MongoTemplate 进行CURD

1.插入一条数据
    /*** 1.添加*/@Testpublic void createUser(){User user = new User();user.setName("parker");user.setNumber(7);user.setPosition("striker");User insert_user = mongoTemplate.insert(user);System.out.println(insert_user);}

template会返回带 _id 的新实体。

2.查询所有数据
    /*** 2.查询所有*/@Testpublic void findAll(){List list = mongoTemplate.findAll(User.class);System.out.println(list);}
3.通过 id 查询
    /*** 3.通过id查询*/@Testpublic void findById(){User user = mongoTemplate.findById("63cba6483a54a937e410d3bd", User.class);System.out.println(user);}

成功打印数据库中数据 User(id=63cba6483a54a937e410d3bd, name=parker, number=7, position=striker) 。

4.条件查询
    /*** 4.条件查询*/@Testpublic void findUserList(){// select * from User where name="parker" and number=7Query query = new Query(Criteria.where("name").is("parker").and("number").is(7));List users = mongoTemplate.find(query, User.class);System.out.println(users);}
5.模糊查询
    /*** 5.模糊查询*/@Testpublic void findUserList2(){// select * from User where name like "park"//模糊查询的条件String name = "par";//构建正则表达式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 users = mongoTemplate.find(query, User.class);System.out.println(users);}
6.分页查询
/*** 6.分页查询*/
@Test
public void findUserPage() {//模拟分页参数构造int pageNo = 1;int pageSize = 5;//模拟条件构造String name = "";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 users = mongoTemplate.find(query.skip((pageNo-1)*pageSize).limit(pageSize),User.class);System.out.println(users);
}
7.修改
/*** 7.修改*/
@Test
public void updateUser(){//根据id查询User user = mongoTemplate.findById("63cba6483a54a937e410d3bd", User.class);//模拟修改值user.setNumber(15);user.setPosition("midfield");//调用方法实现修改Query query = new Query(Criteria.where("_id").is(user.getId()));Update update = new Update();update.set("number",user.getNumber());update.set("position",user.getPosition());UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);//返回的upsert对象可以通过getModifiedCount来查看影响的行数long count = upsert.getModifiedCount();System.out.println(count);
}

调用的 MongoTemplate 方法为 upsert ,不是 update ,无混淆!upsert 方法返回一个对象,可以通过该对象查看成功修改了多少行。

8.删除
/*** 8.删除*/
@Test
public void deleteUser(){Query query = new Query(Criteria.where("_id").is("63cba6483a54a937e410d3bd"));DeleteResult deleteResult = mongoTemplate.remove(query, User.class);//返回的upsert对象可以通过getDeletedCount来查看影响行数long count = deleteResult.getDeletedCount();System.out.println(count);
}

remove 方法返回一个对象,可以通过该对象查看成功删除了多少行。

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...