springboot整合mongodb 保姆级教程

news2024/11/17 3:32:34

1、确保mongodb是否安装

Linux安装docker 保姆级教程_ 来杯咖啡的博客-CSDN博客(可以看这篇文章)

2、代码展示

        2.1 使用 MongoTemplate

                创建boot项目,导入架包。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.gitkeki</groupId>
    <artifactId>mongo01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mongo01</name>
    <description>mongo01</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--mongodb所需包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10.1</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

只要jar包

<!--mongodb所需包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

                 编写配置文件

                 编写实体类

@Data
@Document("User")
public class User {

    @Id //生成id策略
    private String id;
    private String name;
    private Integer age;
    private String email;
    private String createDate;
}

                测试类

@SpringBootTest
public class Mongo01ApplicationTests {

    //注入mongoMongoTemplate
    @Autowired
    private MongoTemplate mongoTemplate;


    //添加操作
    @Test
    public void test1(){
        User user = new User();
        user.setAge(22);
        user.setName("zhangsan");
        user.setEmail("123@qq.com");
        User user1 = mongoTemplate.insert(user);
        System.out.println(user1);
    }




    //查询所有记录
    @Test
    public void test2(){
        List<User> userList = mongoTemplate.findAll(User.class);
        System.out.println("==================>>>>>>"+userList);
    }




    //id查询
    @Test
    public void test3(){
        User user = mongoTemplate.findById("63721b7b654a227a3eb55ac8", User.class);
        System.out.println("==================>>>>>>"+user);
    }



    //条件查询
    @Test
    public void test4(){
        //name = test and age = 20
        Query query = new Query(Criteria.where("name").is("test")
                .and("age").is(20));
        List<User> user = mongoTemplate.find(query, User.class);
        System.out.println("==================>>>>>>"+user);
    }



    //模糊查询
    @Test
    public void test5(){
        //name like test and age = 20
        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> user = mongoTemplate.find(query, User.class);
        System.out.println("==================>>>>>>"+user);
    }



    //分页查询
    @Test
    public void test6(){
       int pageNo = 1;
       int pageSize = 5;

       //条件构造
       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));
       //分页构键
        //查询记录数
        long count = mongoTemplate.count(query, User.class);
        //分页
        List<User> users =
                mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);
        System.out.println("==================>>>>>>>>>>总条数"+count);
        System.out.println("==================>>>>>>>>>>数据"+users);
    }



    //修改
    @Test
    public void test7(){
        //根据id查询
        User user = mongoTemplate.findById("63721b7b654a227a3eb55ac8", User.class);

        //修改值
        user.setAge(2);
        user.setName("testUpdate");
        user.setEmail("129999999993@qq.com");

        //调用方法
        Query query = new Query(Criteria.where("id").is(user.getId()));
        Update update = new Update();
        update.set("name", user.getName());
        update.set("age", user.getAge());
        update.set("email", user.getEmail());
        UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);
        long count = upsert.getModifiedCount();
        if (count>0){
            System.out.println("=========>>>>>>>>>成功" + count);
        }else{
            System.out.println("=========>>>>>>>>>失败" + count);
        }
    }

    //删除
    @Test
    public void test8(){
        Query query = new Query(Criteria.where("id").is("63721b7b654a227a3eb55ac8"));
        DeleteResult remove = mongoTemplate.remove(query, User.class);
        long count = remove.getDeletedCount();
        if (count>0){
            System.out.println("=========>>>>>>>>>成功" + count);
        }else{
            System.out.println("=========>>>>>>>>>失败" + count);
        }
    }

}

        2.2使用 Repository

                创建boot项目,导入架包。(与上面的jar是一样的)

                编写配置文件(与上面的配置文件是一样的)

                编写实体类((与上面的实体类是一样的)

                编写Repository类

@Repository
public interface UserRepository extends MongoRepository<User, String> {
}

                测试类

@SpringBootTest
class Mongo02ApplicationTests {

    @Autowired
    private UserRepository userRepository;

    //添加操作
    @Test
    public void test1() {
        User user = new User();
        user.setAge(20);
        user.setName("张三");
        user.setEmail("3332200@qq.com");
        User user1 = userRepository.save(user);
        System.out.println(user1);
    }




    //查询所有记录
    @Test
    public void test2() {
        List<User> userList = userRepository.findAll();
        System.out.println(userList);
    }




    //id查询
    @Test
    public void test3() {
        User user = userRepository.findById("63722813f46ed0045f89c175").get();
        System.out.println(user);
    }



    //条件查询
    @Test
    public void test4() {
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        Example<User> userExample = Example.of(user);
        List<User> userList = userRepository.findAll(userExample);
        System.out.println(userList);
    }



    //模糊查询
    @Test
    public void test5(){

        //设置模糊查询规则
        ExampleMatcher matcher = ExampleMatcher.matching()
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
                .withIgnoreCase(true);

        User user = new User();
        user.setName("tes");
        Example<User> userExample = Example.of(user,matcher);
        List<User> userList = userRepository.findAll(userExample);
        System.out.println(userList);
    }



    //分页查询
    @Test
    public void test6(){
        //设置分页参数  0 == 第一页
        Pageable pageable = PageRequest.of(0, 3);
        User user = new User();
        user.setName("test1");
        Example<User> userExample = Example.of(user);
        Page<User> page = userRepository.findAll(userExample, pageable);
        System.out.println(page.getContent());
    }



    //修改
    @Test
    public void test7(){
        User user = userRepository.findById("63722813f46ed0045f89c175").get();
        user.setName("张三_1");
        user.setAge(25);
        user.setEmail("883220990@qq.com");
        User save = userRepository.save(user);
        System.out.println(save);
    }

    //删除
    @Test
    public void test8() {
        userRepository.deleteById("5ffbfe8197f24a07007bd6ce");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

带你深入了解一下vue.js中的this.$nextTick!

我们先看看nextTick究竟是个啥&#xff1f; console.log(this.$nextTick); // 控制台打印 if(fn){return nextTick(fn, this); } 我们可以看出nextTick就是一个方法&#xff0c;方法有两个参数&#xff1a;fn和this&#xff0c;fn就是需要传的回调函数&#xff0c;this就是所…

主轴承盖螺栓拧紧机PLC控制程序

HMI为西门子TP900触摸屏&#xff0c;支持屏幕触摸和按键操作 设备主要参数 设备外形尺寸&#xff1a;长*宽*高 2180*1900*2500mm 生产节拍&#xff1a; 55 S 电源电压&#xff1a; AC380V5%&#xff0c;50HZ&#xff0c;三相五线制 系统组态 常见故障处理 气缸报警 报警原…

Windows下安装VTK8.2.0

Windows下安装VTK8.2.0 1、依赖 VS2017 Qt5 cmake 2、前期准备 2.1、访问vtk官方下载VTK8.2.0源码 VTK源码下载地址&#xff1a;https://vtk.org/download/ 2.2、配置环境变量 配置CMAKE_PREFIX_PATH&#xff0c;值为Qt的bin路径 2.3、新建2个文件夹一个用于存放cm…

11 个有用的现代 JavaScript 技巧

在我们日常开发工作中&#xff0c;我们经常使用到字符串的转换、检查它是否存在的对象中的键、有条件地操作对象数据、过滤数组中的假值等。 在这里&#xff0c;我整理了一些很棒的JavaScript的技巧&#xff0c;这些技巧是我个人最喜欢的&#xff0c;因为它使我的代码更短更干…

亚马逊云科技:还在苦于ETL?Zero ETL的时代已全面到来

在2022亚马逊云科技re:Invent全球大会上&#xff0c;亚马逊云科技数据和机器学习副总裁Swami Sivasubramanian表示&#xff1a;“当前&#xff0c;客户管理的数据既庞大又复杂&#xff0c;这意味着他们不能只用单一技术或几个工具来分析和探索这些数据。在此次2022亚马逊云科技…

Java反射和new效率差距有多大?

1、创建对象的两种方式 //new 方式创建对象 ReflectDemo reflectDemo new ReflectDemo();//反射创建对象 反射创建对象的三种方式 (1)Class<ReflectDemo> reflectDemoClass ReflectDemo.class; (2)Class<?> aClass Class.forName ("com.whale.springtra…

网络ping不通,试试这8招

摘要&#xff1a;网络ping不通&#xff0c;该怎么办&#xff1f;本文教你8个大招&#xff0c;轻松找到问题根源。本文分享自华为云社区《网络ping不通&#xff0c;该怎么办&#xff1f;》&#xff0c;作者&#xff1a;wljslmz。 如下图&#xff0c;PC&#xff08;192.168.10.1…

使用windows系统给C盘分盘

前言 一般我们使用新电脑的时候&#xff0c;有的时候默认给我们分好了盘&#xff0c;有时候只会把全部的内存都放到C盘&#xff0c;这样就需要我们自己手动进行分配资源和分配其他硬盘资源 今天公司邮寄的新电脑到了&#xff0c;正好属于后者&#xff0c;借助这个机会分享下我…

【C语言进阶】六.预处理

&#xff08;1&#xff09;程序的翻译环境和执行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。包含编译加链接第2种是执行环境&#xff0c;它用于实际执行代码。 &#xff08;2…

KingbaseES V8R6集群运维案例---数据块故障自动修复(auto_bmr)

案例说明&#xff1a; 在Oracle11.2版本之后&#xff0c;DataGuard 若搭建实时应用日志的物理备库&#xff0c;那么在主库数据文件少 量坏块的情况下&#xff0c;可以利用ABCR技术快速修复坏块。 Starting in Oracle Database 11g Release 2 (11.2), the primary database auto…

高通Ride软件开发包使用指南(12)

高通Ride软件开发包使用指南&#xff08;12&#xff09;9 PCIe交换机9.1简介9.2 PCIe交换机管理9.2.1工具9.2.2 COM端口和COM端口设置9.2.3更新固件和配置9.2.3.1工具设置9.2.3.2 Platform setup9.2.3.3交换机更新9 PCIe交换机 9.1简介 在Snapdragon Ride的高级配置中&#x…

四、基于kubeadm安装kubernetes1.25集群第三篇

接上篇&#xff1a;https://blog.csdn.net/u011837804/article/details/128355649 1、安装 kubeadm、kubelet 和 kubectl 1.1、配置yum源 cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernet…

算法| Java的int类型最大值为什么是21亿多?

开篇 本文主要介绍在Java中&#xff0c;为什么int类型的最大值为2147483647。 理论值 我们都知道在Java中&#xff0c;int 的长度为32位。 理论上&#xff0c;用二进制表示&#xff0c;32位每一位都是1的话&#xff0c;那么这个数是多少呢&#xff1f; 我们来计算一下&…

【QGIS入门实战精品教程】10.1:QGIS基于DEM数据的地形分析案例教程

本文讲解QGIS中基于DEM数据的地形分析方法,包括:坡度分析、坡向分析、山体阴影、地貌分析、强度指数(地形复杂性)。 文章目录 一、加载DEM二、坡度分析三、坡向分析四、山体阴影五、地貌分析六、强度指数(地形复杂性)QGIS提供了地形分析的工具,位于工具箱→Raster terrain a…

录屏怎么录声音?电脑录视频怎么带声音?图文教学来了

电脑录屏功能的应用&#xff0c;给我们的日常生活带来了便利。随着电脑录屏功能的应用&#xff0c;“电脑录屏”随着功能的升级&#xff0c;电脑屏幕录制不仅仅是简单的屏幕录制&#xff0c;还有很多额外的功能&#xff0c;比如录制带声音的视频&#xff01;那么录屏怎么录声音…

[C++]类和对象【下】

&#x1f941;作者&#xff1a; 华丞臧 &#x1f4d5;​​​​专栏&#xff1a;【C】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449;LeetCode 文章目录再谈构造…

结构建模设计——Solidworks软件之装配体操作基本总结一(装配体功能界面简介、插入零件操作、基本配合操作)

【系列专栏】&#xff1a;博主结合工作实践输出的&#xff0c;解决实际问题的专栏&#xff0c;朋友们看过来&#xff01; 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享…

漏洞猎人白夜追凶记

编者按 数字化浪潮蓬勃兴起&#xff0c;企业面临的安全挑战亦日益严峻。 腾讯安全近期将复盘2022年典型的攻击事件&#xff0c;帮助企业深入了解攻击手法和应对措施&#xff0c;完善自身安全防御体系。 本篇是第三期&#xff0c;用一个实际案例讲述了企业在面临攻击时&#xf…

【Java枚举类与注解】——一篇文章读懂枚举类与注解

文章目录2.枚举2.1概述2.2定义格式2.3枚举的特点2.4枚举的方法3.注解3.1概述3.2自定义注解3.3 元注解2.枚举 2.1概述 为了间接的表示一些固定的值&#xff0c;Java就给我们提供了枚举&#xff0c;是指将变量的值一一列出来&#xff0c;变量的值只限于列举出来的值的范围内。 …

C. Arpa’s overnight party and Mehrdad’s silent entering(构造+二分图)

Problem - 741C - Codeforces 请注意&#xff0c;阿尔帕的土地上的女孩真的很有吸引力。 阿尔帕喜欢过夜的聚会。在一次聚会中&#xff0c;迈尔达德突然出现。他看到n对朋友围坐在一张桌子旁。第i对包括一个男孩&#xff0c;坐在第i把椅子上&#xff0c;和他的女朋友&#xff…