SpringBoot系列(2)整合MongoDB实现增删改查(完整案例)

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 自己本科时候一直使用的是Mysql,目前的课题组使用的是MongoDB,因此就花了一部分时间整理了一下,实现springboot与MongoDB的整合,并且实现基本的增删改查操作,从头到尾给出一个完整的案例。

一、环境配置


对于环境配置我是用了一张表来展示,版本之间差异不大,你可以基于其他版本进行测试。

v2-b44483f99231fe72f8906080c578d34c_1440w.jpg二、代码整合


我们在这里举的例子是对用户类user的增删改查操作。现在我们先看一下现在的项目结构:

v2-a63dd83f767423a0a91003e2adcf5a46_1440w.jpg

下面我们就来看一下具体实现步骤。


第一步:在pom中添加依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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-devtools</artifactId>
            <optional>true</optional>
            <scope>true</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.38</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <!--测试依赖,可去掉-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
</dependencies>

第二步:在pom中启动热部署

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!--如果没有该项配置,devtools不会起作用,应用不会restart -->
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
</build>

第三步:在application.properties文件中添加全局配置信息

##项目配置
server.port=8888
server.servlet.context-path=/mongotest
##mongodb相关配置
spring.data.mongodb.database=test
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017

第四步:新建bean包并创建User类

public class User {
    private int id;
    private String name;
    private String password;
    //getter和setter方法
}

第五步:新建dao包并创建UserRepository接口

public interface UserRepository extends MongoRepository<User,Integer> {
    //查询操作,自己定义实现
    User getByName(String name);
    User getByNameLike(String name);
}

注意:getByName中的name要和User中的name名字一样,比如这里就不能写成getByUserName,因为匹配的是userName和User中的字段name不同,运行的时候就会出错。


第六步:新建service包并创建UserService接口

public interface UserService {
    //增删改查接口
    public void saveUser(User user);
    public void removeUserByUserName(String name);
    public void updateUser(User user);
    public User getByUserName(String name);
    public User getByUserNameLike(String name);
}

第七步:在service包创建UserServiceImpl类

@Service//这个标志不要忘记了
public class UserServiceImpl implements UserService {
    //由于我们添加了依赖,可以使用注解直接注入
    @Resource
    private MongoTemplate mongoTemplate;
    @Resource
    private UserRepository userRepository;
    //保存用户
    @Override
    public void saveUser(User user) {
        userRepository.save(user);
    }
    //通过用户名字删除
    @Override
    public void removeUserByUserName(String name) {
        Query query=new Query(new Criteria("name").is(name));
        mongoTemplate.remove(query,User.class);
    }
    //通过用户id来更新名字
    @Override
    public void updateUser(User user) {
        Query q=new Query(new Criteria("id").is(user.getId()));
        Update update=new Update().set("name", user.getName());
        mongoTemplate.updateMulti(q, update, User.class);
    }
    //通过用户名查询
    @Override
    public User getByUserName(String name) {
        return userRepository.getByName(name);
    }
    //通过相似用户名查询
    @Override
    public User getByUserNameLike(String name) {
        return userRepository.getByNameLike(name);
    }
}

在这里你可能有一些疑问,一会使用mongoTemplate,一会又使用userRepository,在每一种情况下到底用哪个,在这里我们就给出一个对比,


(1)使用MongoRepository

使用Repository已经提供了基本的增删改查功能。

对于查询操作:你不用写相关的查询组合语句,它会内部为我们实现这样的一个类。 你只需要按照相关规则就好。


对于增加操作:要有主键才可以,并且不能是date日期类型的。

但是他的缺点是不够灵活,这时候就可以使用MongoTemplate了。


(2)使用MongoTemplate


Spring Data给我们提供了MongoTemplate类,是非常强大的,里面提供了大量的操作数据库的方法,而且是线程安全的。可是它的很多方法都涉及到了Class,和CollectionName。针对不同的实体类,我们需要重复写不同的方法。

第八步:创建controller包并创建Usercontroller类

@RestController
public class UserController {
    //注入service
    @Resource
    private UserService userService;
    //多增加几个用户
    @RequestMapping("/save")
    @ResponseBody
    public String saveUser() {
        for(int i=0;i<3;i++){
            User user=new User();
            user.setId(i);
            user.setName("fdd"+i);
            user.setPassword("12345"+i);
            userService.saveUser(user);
        }
        return "插入用户成功";
    }
    //删除fdd0
    @RequestMapping("/remove")
    @ResponseBody
    public String removeUserByUserName() {
        userService.removeUserByUserName("fdd0");
        return "删除用户成功";
    }
    //把1号名字改一下
    @RequestMapping("/update")
    @ResponseBody
    public String updateUser() {
        User user=new User();
        user.setId(1);
        user.setName("java的架构师技术栈");
        user.setPassword("123456");
        userService.updateUser(user);
        return "更新用户信息成功";
    }
    //通过名字查询
    @RequestMapping("/getUserByName")
    @ResponseBody
    public User getUserByName() {
        User user=userService.getByUserName("fdd2");
        return user;
    }
    //通过相似名字查询
    @RequestMapping("/getUserByNameLike")
    @ResponseBody
    public User getUserByNameLike() {
        User user=userService.getByUserNameLike("fdd");
        return user;
    }
}

到目前为止我们代码就实现完了。

最后一步,那就是测试:

v2-0790bdc8144ee77c3a6be28db09f06b7_1440w.jpg

我们可以在浏览器输入不同的路径测试。当然roto3T也有我们的插入的结果,其他的自己测试一下就好:v2-ed5b78133b0b816e475b4a7c0f251a46_1440w.jpg

OK,这就是整合的整个过程,在这里其实也只是给出一个基础案例,希望对你有帮助。


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
6天前
|
前端开发 Java
audio案例(1),2024年最新springboot项目源码
audio案例(1),2024年最新springboot项目源码
|
6天前
|
存储 NoSQL 数据挖掘
MongoDB 实时分析案例
【5月更文挑战第7天】
|
9天前
|
NoSQL Java MongoDB
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
【5月更文挑战第11天】本文介绍了如何将非关系型数据库MongoDB与Spring Boot框架集成,以实现高效灵活的数据管理。Spring Boot简化了Spring应用的构建和部署,MongoDB则以其对灵活数据结构的处理能力受到青睐。集成步骤包括:添加MongoDB依赖、配置连接信息、创建数据访问对象(DAO)以及进行数据操作。通过这种方式,开发者可以充分利用两者优势,应对各种数据需求。在实际应用中,结合微服务架构等技术,可以构建高性能、可扩展的系统。掌握MongoDB与Spring Boot集成对于提升开发效率和项目质量至关重要,未来有望在更多领域得到广泛应用。
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
|
9天前
|
数据采集 Web App开发 Java
Python 爬虫:Spring Boot 反爬虫的成功案例
Python 爬虫:Spring Boot 反爬虫的成功案例
|
9天前
|
自然语言处理 Java 索引
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
30 1
|
9天前
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。
|
9天前
|
JSON Java Maven
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
46 0
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
|
9天前
|
XML 前端开发 JavaScript
SpringBoot之响应案例的详细解析
SpringBoot之响应案例的详细解析
14 0
|
9天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
36 0
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
NoSQL Java 测试技术
补习系列(17)-springboot mongodb 内嵌数据库
简介 前面的文章中,我们介绍了如何在SpringBoot 中使用MongoDB的一些常用技巧。那么,与使用其他数据库如 MySQL 一样,我们应该怎么来做MongoDB的单元测试呢? 使用内嵌数据库的好处是不需要依赖于一个外部环境,如果每一次跑单元测试都需要依赖一个稳定的外部环境,那么这样的测试是极不稳定的。
1889 0