前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Springboot 整合 MongoDB

Springboot 整合 MongoDB

作者头像
用户7630333
发布2023-12-07 18:41:29
6340
发布2023-12-07 18:41:29
举报
文章被收录于专栏:look Java

Springboot 整合 MongoDB

这节我们将整合 Spring Boot 与 Mongo DB 实现增删改查的功能,并且实现序列递增。

Mongo DB 的基本介绍和增删改查的用法可以参考我之前的文章:MongoDB 的安装和基本操作

新建一个 Spring Boot 项目,版本为 2.3.7.RELEASE,并引入如下依赖:

代码语言:javascript
复制
 <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
 </dependency>

然后可以通过 Mongo Shell 或者 Navicat 工具创建一个名称为 test 的数据库,并新增 user 文档(文档,类似与关系型数据库里的数据表):navicat 破解

在配置文件中配置 mongo 的连接信息:

代码语言:javascript
复制
spring:
  data:
    mongodb:
      host: localhost #地址
      port: 27017 #端口号
      database: test #数据库名

Mongo DB 的默认端口为 27017,使用的数据库为刚刚创建的 test。

创建 User 实体类:

@Document("User")表示这是文档对象,名称为 User,对应 Mongo DB 里的 User 集合。@Id标注主键字段,String 类型的主键值在插入的时候 Mongo DB 会帮我们自动生成。如果对象中的某个属性为非表字段,可以使用注解@Transient进行排除。

代码语言:javascript
复制
@Data
@Document("User")
public class User {
    @Id
    private String id;
    private String name;
    private Integer age;
}

MongoRepository

简单增删改查

创建一个 UserDao 接口:

代码语言:javascript
复制
@Repository
public interface UserDao extends MongoRepository<User, String> {
}

接口继承自MongoRepository,泛型分别为实体对象和主键类型。通过继承MongoRepositoryUserDao包含了一些增删改查的方法,如下图所示:

为了方便演示,接下来直接去到测试类进行测试:

记得注入 UserDao

代码语言:javascript
复制
import look.word.mongo.bean.User;
import look.word.mongo.dao.UserDao;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.List;

@SpringBootTest
class MongoDaoTest {

    @Resource
    private UserDao userDao;

    /**
     * 新增和修改都是 save方法,
     * id 存在为修改,id 不存在为新增
     */
    @Test
    void save() {
        User user = new User();
        user.setName("张三");
        user.setAge(18);
        System.out.println(userDao.save(user));
        userDao.save(user);
    }

    /**
     * 删除
     */
    @Test
    void remove(){
        userDao.deleteById("62c155be562fb86d5bcce2d0");
    }

    /**
     * 查询所有
     */
    @Test
    void findAll(){
        List<User> users = userDao.findAll();
        users.stream().forEach(user -> System.out.println(user));
    }

}

上面我们编写了基本的增删改查样例,新增和修改都是通过save方法完成的,当主键存在时则为修改,主键不存在则为新增。

测试新增用户:

这里没有传入 id 做的是新增 新增成功后 会返回当前插入的文档对象

测试删除用户:

删除成功后 没有任何信息的提示 这里演示的是根据 id 去删除

测试修改用户:

  • 可以看到 根据 id 修改时 会把我们不需要修改的值修改成 null 了 因为我们没有传入 如何避免呢?
  • 可以先根据 id 查询出文档信息 然后在修改需要修改的字段即可。

测试查询用户:

多条件查询:

Spring Data 提供了对 mongodb 数据访问的支持,我们只需要继承 MongoRepository 类,按照 Spring Data 规范就可以了

SpringData 方法定义规范

规则:

1、不是随便声明的,而需要符合一定的规范

2、 查询方法以 find | read | get 开头

3、 涉及条件查询时,条件的属性用条件关键字连接

4、 要注意的是:条件属性首字母需要大写

5、 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性,若需要使用级联属性,则属性之间使用_强制进行连接

比如通过用户的年龄段来查询:

注意: 方法参数个数需要和方法名中所需要的参数个数对应上。

代码语言:javascript
复制
@Repository
public interface UserDao extends MongoRepository<User, String> {

    /**
     * 根据年龄段来查找
     *
     * @param from from
     * @param to   to
     * @return List<User>
     */
    List<User> findByAgeBetween(Integer from, Integer to);
}

在输入findBy后,IDEA 会根据实体对象的属性和 SQL 的各种关键字自动组合提示:

排序与分页:

增删改查可以用MongoTemplate也可以实现

排序和分页需要使用MongoTemplate对象来完成,在UserService里新增一个getUserByCondition方法:

代码语言:javascript
复制
    @Resource
    private MongoTemplate mongoTemplate;	

    @Test
    void getUserByCondition(){
        // 查询条件对象
        Query query = new Query();
        Criteria criteria = new Criteria();
        Sort sort = Sort.by(Sort.Direction.DESC, "age");
        //查询第一页 每页1条 按照年龄升序
        Pageable pageable = PageRequest.of(0, 10, sort);
        // 模糊查询
        criteria.and("name").regex("三");
        // 把查询规则加入 查询对象中
        query.addCriteria(criteria);
        List<User> users = mongoTemplate.find(query.with(pageable), User.class);
        System.out.println(users);
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Springboot 整合 MongoDB
    • MongoRepository
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档