参考文章:
SpringBoot整合Mongodb操作的详细教程_程序员小徐同学的博客-CSDN博客_springboot操作mongodb
SpringBoot整合MongoDB(一)_保护我方胖虎的博客-CSDN博客_springboot mongodb
采用 docker-compose方法安装
参考文章:
一个很不错的小白运维工具
- # 安装git命令: yum install -y git
- git clone https://gitee.com/zhengqingya/docker-compose.git
- cd docker-compose/Linux
-
- cd mongodb/
docker-compose -f docker-compose.yaml -p mongodb up -d
访问地址:http://ip地址:1234 Connection string:mongodb://admin:123456@ip地址:27017
参考文章:
(258条消息) 使用maven创建一个简单的springboot项目_搬砖的阿陆的博客-CSDN博客_maven创建springboot项目
2.导入包
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-data-mongodbartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
-
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- dependency>
-
- <dependency>
- <groupId>joda-timegroupId>
- <artifactId>joda-timeartifactId>
- <version>2.10.1version>
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- <scope>testscope>
- <exclusions>
- <exclusion>
- <groupId>org.junit.vintagegroupId>
- <artifactId>junit-vintage-engineartifactId>
- exclusion>
- exclusions>
- dependency>
- dependencies>
3.在application.properties文件添加配置
spring.data.mongodb.uri=mongodb://47.93.118.241:27017/test
无密码连接:
- spring:
- data:
- mongodb:
- uri: mongodb://服务器IP:端口/数据库名
有密码连接:
- spring:
- data:
- mongodb:
- uri: mongodb://用户名:密码@服务器IP:端口/数据库名
- # 上方为明确指定某个数据的用户进行连接
- # 也可以使用admin 数据库中的用户进行连接 统一到admin 数据库进行认证
- # admin 用户认证 url 写法: mongodb://账户:密码%40@ip:端口/数据库名?authSource=admin&authMechanism=SCRAM-SHA-1
4.添加实体
- package com.xuda.entity;
-
- import lombok.Data;
- import org.springframework.data.annotation.Id;
- import org.springframework.data.mongodb.core.mapping.Document;
-
- /**
- * @author :程序员徐大大
- * @description:TODO
- * @date :2022-04-08 19:26
- */
- @Data
- @Document("User")
- public class User {
- @Id
- private String id;
- private String name;
- private Integer age;
- private String email;
- private String createDate;
-
- }
-
5.常用方法
mongoTemplate.findAll(User.class): 查询User文档的全部数据
mongoTemplate.findById(, User.class): 查询User文档id为id的数据
mongoTemplate.find(query, User.class);: 根据query内的查询条件查询
mongoTemplate.upsert(query, update, User.class): 修改
mongoTemplate.remove(query, User.class): 删除
mongoTemplate.insert(User): 新增
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”)))
6.添加测试类
- package com.xuda;
-
- import com.mongodb.client.result.DeleteResult;
- import com.mongodb.client.result.UpdateResult;
- import com.xuda.entity.User;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.data.domain.Example;
- import org.springframework.data.mongodb.core.MongoTemplate;
- import org.springframework.data.mongodb.core.query.Criteria;
- import org.springframework.data.mongodb.core.query.Query;
- import org.springframework.data.mongodb.core.query.Update;
-
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.regex.Pattern;
-
- @SpringBootTest
- class MongodbApplicationTests {
-
- //注入MongoTemplate
- @Autowired
- private MongoTemplate mongoTemplate;
-
- //添加操作
- @Test
- void contextLoads() {
- User user = new User();
- user.setAge(20);
- user.setName("test");
- user.setEmail("4932200@qq.com");
- User user1 = mongoTemplate.insert(user);
- System.out.println(user1);
-
- }
- //查询所有
- @Test
- public void findUser() {
- List
userList = mongoTemplate.findAll(User.class); - System.out.println(userList);
- }
- //id查询
- @Test
- public void getById() {
- User user = mongoTemplate.findById("62501d8d5e835d2841ebcfc7",User.class);
- System.out.println(user);
- }
- //条件查询
- @Test
- public void findUserList() {
- Query query = new Query(Criteria.where("name").is("test").and("age").is(20));
- List
list = mongoTemplate.find(query,User.class); - System.out.println(list);
- }
-
-
- //模糊查询
- @Test
- 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
userList = mongoTemplate.find(query, User.class); - System.out.println(userList);
- }
-
-
- //分页查询
- @Test
- 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); //查询记录数
- //其中的skip表示跳过的记录数,当前页为1则跳过0条,为2则跳过10条,(也就是跳过第一页的10条数据)
- List
userList = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class); //分页查询 -
- Map
pageMap = new HashMap<>(); - pageMap.put("list", userList);
- pageMap.put("totalCount",totalCount);
- System.out.println(pageMap);
- }
-
- //修改
- @Test
- public void updateUser() {
- User user = mongoTemplate.findById("62501d8d5e835d2841ebcfc7", User.class); // 先查询数据
- user.setName("test_1");
- user.setAge(25);
- user.setEmail("493220990@qq.com"); //设置修改的值
- Query query = new Query(Criteria.where("_id").is(user.getId()));//查到数据
- Update update = new Update();
- update.set("name", user.getName()); //设置mongodb的字段值
- update.set("age", user.getAge());
- update.set("email", user.getEmail());
- UpdateResult result = mongoTemplate.upsert(query, update, User.class);
- long count = result.getModifiedCount(); //影响行数
- System.out.println(count);
- }
-
- //删除操作
- @Test
- public void delete() {
- Query query =
- new Query(Criteria.where("_id").is("62501d8d5e835d2841ebcfc7")); //查询到数据
- DeleteResult result = mongoTemplate.remove(query, User.class); //删除方法
- long count = result.getDeletedCount();
- System.out.println(count);
- }
-
- }
-