• 2022/11/2 springboot整合mongodb


    参考文章:

    SpringBoot整合Mongodb操作的详细教程_程序员小徐同学的博客-CSDN博客_springboot操作mongodb

    SpringBoot整合MongoDB(一)_保护我方胖虎的博客-CSDN博客_springboot mongodb

    一.阿里云服务器上下载和安装

    采用 docker-compose方法安装 

    参考文章:

    docker-compose: docker-compose集成环境系列

    一个很不错的小白运维工具

    1. # 安装git命令: yum install -y git
    2. git clone https://gitee.com/zhengqingya/docker-compose.git
    3. cd docker-compose/Linux
    4. cd mongodb/
    docker-compose -f docker-compose.yaml -p mongodb up -d

    访问地址:http://ip地址:1234 Connection string:mongodb://admin:123456@ip地址:27017

    二.springboot整合mongodb

    1.创建springboot项目

    参考文章:

    (258条消息) 使用maven创建一个简单的springboot项目_搬砖的阿陆的博客-CSDN博客_maven创建springboot项目

    2.导入包

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.bootgroupId>
    4. <artifactId>spring-boot-starter-data-mongodbartifactId>
    5. dependency>
    6. <dependency>
    7. <groupId>org.springframework.bootgroupId>
    8. <artifactId>spring-boot-starter-webartifactId>
    9. dependency>
    10. <dependency>
    11. <groupId>org.projectlombokgroupId>
    12. <artifactId>lombokartifactId>
    13. dependency>
    14. <dependency>
    15. <groupId>joda-timegroupId>
    16. <artifactId>joda-timeartifactId>
    17. <version>2.10.1version>
    18. dependency>
    19. <dependency>
    20. <groupId>org.springframework.bootgroupId>
    21. <artifactId>spring-boot-starter-testartifactId>
    22. <scope>testscope>
    23. <exclusions>
    24. <exclusion>
    25. <groupId>org.junit.vintagegroupId>
    26. <artifactId>junit-vintage-engineartifactId>
    27. exclusion>
    28. exclusions>
    29. dependency>
    30. dependencies>

    3.在application.properties文件添加配置

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

    无密码连接:

    1. spring:
    2.   data:
    3.     mongodb:
    4.       uri: mongodb://服务器IP:端口/数据库名

    有密码连接:

    1. spring:
    2.   data:
    3.     mongodb:
    4.       uri: mongodb://用户名:密码@服务器IP:端口/数据库名
    5.       # 上方为明确指定某个数据的用户进行连接
    6.       # 也可以使用admin 数据库中的用户进行连接  统一到admin 数据库进行认证
    7.       # admin 用户认证 url 写法: mongodb://账户:密码%40@ip:端口/数据库名?authSource=admin&authMechanism=SCRAM-SHA-1

    4.添加实体

    1. package com.xuda.entity;
    2. import lombok.Data;
    3. import org.springframework.data.annotation.Id;
    4. import org.springframework.data.mongodb.core.mapping.Document;
    5. /**
    6. * @author :程序员徐大大
    7. * @description:TODO
    8. * @date :2022-04-08 19:26
    9. */
    10. @Data
    11. @Document("User")
    12. public class User {
    13. @Id
    14. private String id;
    15. private String name;
    16. private Integer age;
    17. private String email;
    18. private String createDate;
    19. }

    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.添加测试类

    1. package com.xuda;
    2. import com.mongodb.client.result.DeleteResult;
    3. import com.mongodb.client.result.UpdateResult;
    4. import com.xuda.entity.User;
    5. import org.junit.jupiter.api.Test;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.boot.test.context.SpringBootTest;
    8. import org.springframework.data.domain.Example;
    9. import org.springframework.data.mongodb.core.MongoTemplate;
    10. import org.springframework.data.mongodb.core.query.Criteria;
    11. import org.springframework.data.mongodb.core.query.Query;
    12. import org.springframework.data.mongodb.core.query.Update;
    13. import java.util.HashMap;
    14. import java.util.List;
    15. import java.util.Map;
    16. import java.util.regex.Pattern;
    17. @SpringBootTest
    18. class MongodbApplicationTests {
    19. //注入MongoTemplate
    20. @Autowired
    21. private MongoTemplate mongoTemplate;
    22. //添加操作
    23. @Test
    24. void contextLoads() {
    25. User user = new User();
    26. user.setAge(20);
    27. user.setName("test");
    28. user.setEmail("4932200@qq.com");
    29. User user1 = mongoTemplate.insert(user);
    30. System.out.println(user1);
    31. }
    32. //查询所有
    33. @Test
    34. public void findUser() {
    35. List userList = mongoTemplate.findAll(User.class);
    36. System.out.println(userList);
    37. }
    38. //id查询
    39. @Test
    40. public void getById() {
    41. User user = mongoTemplate.findById("62501d8d5e835d2841ebcfc7",User.class);
    42. System.out.println(user);
    43. }
    44. //条件查询
    45. @Test
    46. public void findUserList() {
    47. Query query = new Query(Criteria.where("name").is("test").and("age").is(20));
    48. List list = mongoTemplate.find(query,User.class);
    49. System.out.println(list);
    50. }
    51. //模糊查询
    52. @Test
    53. public void findUsersLikeName() {
    54. String name = "est";
    55. String regex = String.format("%s%s%s", "^.*", name, ".*$");//采用正则表达式进行匹配
    56. Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    57. Query query = new Query(Criteria.where("name").regex(pattern));
    58. List userList = mongoTemplate.find(query, User.class);
    59. System.out.println(userList);
    60. }
    61. //分页查询
    62. @Test
    63. public void findUsersPage() {
    64. String name = "est";
    65. int pageNo = 1; //当前页
    66. int pageSize = 10; //每页的大小
    67. Query query = new Query(); //条件构建部分
    68. String regex = String.format("%s%s%s", "^.*", name, ".*$");
    69. Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    70. query.addCriteria(Criteria.where("name").regex(pattern));
    71. int totalCount = (int) mongoTemplate.count(query, User.class); //查询记录数
    72. //其中的skip表示跳过的记录数,当前页为1则跳过0条,为2则跳过10条,(也就是跳过第一页的10条数据)
    73. List userList = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class); //分页查询
    74. Map pageMap = new HashMap<>();
    75. pageMap.put("list", userList);
    76. pageMap.put("totalCount",totalCount);
    77. System.out.println(pageMap);
    78. }
    79. //修改
    80. @Test
    81. public void updateUser() {
    82. User user = mongoTemplate.findById("62501d8d5e835d2841ebcfc7", User.class); // 先查询数据
    83. user.setName("test_1");
    84. user.setAge(25);
    85. user.setEmail("493220990@qq.com"); //设置修改的值
    86. Query query = new Query(Criteria.where("_id").is(user.getId()));//查到数据
    87. Update update = new Update();
    88. update.set("name", user.getName()); //设置mongodb的字段值
    89. update.set("age", user.getAge());
    90. update.set("email", user.getEmail());
    91. UpdateResult result = mongoTemplate.upsert(query, update, User.class);
    92. long count = result.getModifiedCount(); //影响行数
    93. System.out.println(count);
    94. }
    95. //删除操作
    96. @Test
    97. public void delete() {
    98. Query query =
    99. new Query(Criteria.where("_id").is("62501d8d5e835d2841ebcfc7")); //查询到数据
    100. DeleteResult result = mongoTemplate.remove(query, User.class); //删除方法
    101. long count = result.getDeletedCount();
    102. System.out.println(count);
    103. }
    104. }


     

  • 相关阅读:
    Go - 基本数据类型和其字符串表示之间转换
    066:vue+openlayers画各种图形并获取feature信息( 示例代码 )
    【Cocos】基础篇-2、3D游戏物体成像的基本原理
    js实现websocket服务端和客户端
    调整后每股收益
    计算机毕业设计选什么题目好?springboot 个人健康信息管理系统
    Android入门第34天-Android的Menu组件使用大全
    前端培训丁鹿学堂:前端也要了解的计算机基础(一)
    arcPy与添加 shp 文件(显示在 ArcMap),通过Arcpy打开mxd文档并添加数据的方式
    Hadoop-2.5.2平台环境搭建遇到的问题
  • 原文地址:https://blog.csdn.net/weixin_44021708/article/details/127652918