SpringBoot 整合Mongodb

了解MongoDB

官网:https://www.mongodb.com

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为
WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于JSON 对象。字段值可以包含其他文档,数组及文档数组。

docker安装Mongodb

#拉取镜像 docker pull mongo
#创建容器 docker create --name mongodb -p 27017:27017 -v /data/mongodb:/data/db mongo ## 或在常见mongodb时指定密码 docker run --name
mongo -p 27017:27017 -v mongodata:/data/db -e
MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin
-d mongo
#启动容器 docker start mongodb
#进入容器 docker exec -it mongodb /bin/bash #使用MongoDB客户端进行操作 mongo --mongo -u admin -p admin show dbs #查询所有的数据库

SpringBoot 整合

1.依赖导入

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.配置

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

3.pojo

package com.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

//指定文档的集合
@Document(collection = "taobao")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
    @Id
    private String _id;

    @Field(value = "goodsName")
    private String goodsName;

    @Field(value = "goodsPrice")
    private Double goodsPrice;

    @Field(value = "goodsNum")
    private Integer goodsNum;

    @Field
    //日期格式
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;

    public Goods(String goodsName, Double goodsPrice, Integer goodsNum, Date createDate) {
        this.goodsName = goodsName;
        this.goodsPrice = goodsPrice;
        this.goodsNum = goodsNum;
        this.createDate = createDate;
    }
}

4.dao层

package com.dao;

import com.pojo.Goods;

import java.util.List;

public interface GoodsDao {
    //查询所有
    List<Goods> findAll();
    //插入数据
    void insertOneGoods(Goods goods);
    //删除数据
    void deleteOne(String id);
    //根据名字得到id
    void deleteOneName(String name);
    //根据名字查询
    Goods findByName(String name);
    //根据id查询
    Goods findById(String id);
}

5.实现类

package com.dao;

import com.pojo.Goods;
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.stereotype.Repository;

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

@Repository
public class GoodsDaoImpl implements GoodsDao{

    @Resource
    private MongoTemplate mongoTemplate;

    @Override
    public List<Goods> findAll() {
        return mongoTemplate.findAll(Goods.class);
    }

    @Override
    public void insertOneGoods(Goods goods) {
        mongoTemplate.insert(goods);
    }

    @Override
    public void deleteOne(String id) {
        System.out.println(id);
        //条件构造器
        Criteria criteria=new Criteria();
        criteria.and("_id").is(id);
        Query query=new Query(criteria);
        mongoTemplate.remove(query,Goods.class);
    }

    @Override
    public void deleteOneName(String name) {

    }

    @Override
    public Goods findByName(String name) {
        System.out.println(name);
        //条件构造器
        Criteria criteria=new Criteria();
        criteria.and("goodsName").is(name);
        Query query=new Query(criteria);
       return mongoTemplate.findOne(query,Goods.class);
    }

    @Override
    public Goods findById(String id) {
        return mongoTemplate.findById(id,Goods.class);
    }
}

6.Test类

package com;

import com.dao.GoodsDaoImpl;
import com.pojo.Goods;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

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

@SpringBootTest
class SpringBootMongoDbApplicationTests {

    @Resource
    private GoodsDaoImpl goodsDao;

    @Test
    void contextLoads() {
    }
//查询全部
    @Test
    void testFindAll() {
        List<Goods> all = goodsDao.findAll();
        System.out.println(all.toString());
    }
//根据id删除
    @Test
    void testDeleteOne() {
        //根据姓名查询id 然后在做查询
        Goods good = goodsDao.findByName("华硕电脑");
        System.out.println(good.toString());
        goodsDao.deleteOne(good.get_id());
        System.out.println("删除成功");
    }
//新增
    @Test
    void testInsertGoods() {
        //根据姓名查询id 然后在做查询
        Goods good = new Goods("外星人电脑",5000.0,2000,new Date());
        System.out.println(good.toString());
        goodsDao.insertOneGoods(good);
        System.out.println("新增成功");
    }

    @Test
    void testFindById() {
        //根据姓名查询id 然后在做查询
        try {
            Goods good = goodsDao.findByName("华硕电脑");
            System.out.println(good.toString());
            Goods byId = goodsDao.findById(good.get_id());
            System.out.println(byId.toString());
        }catch (Exception ex){
            System.out.println("用户名不存在"+ex);
        }
    }
}

### Spring Boot 整合 MongoDB 示例教程 #### 配置 `application.yml` 文件中的 MongoDB 连接信息 为了使Spring Boot应用能够连接到MongoDB,在项目的资源目录下的`application.yml`文件中指定MongoDB的相关参数: ```yaml spring: data: mongodb: host: localhost port: 27017 database: test ``` 当MongoDB实例未设置认证机制时,也可以采用URI形式简化配置[^3]。 #### 创建实体类映射文档结构 定义一个Java类来表示存储于MongoDB集合内的文档模型。例如,创建名为`Comment.java`的POJO(Plain Old Java Object),它代表评论表单的数据对象并标注适当注解以便ORM框架识别其为持久化实体。 ```java package com.example.demo_mongodb.po; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "comments") public class Comment { @Id private String id; private String content; private Long timestamp; // Getters and Setters... } ``` #### 定义数据访问接口继承自 `MongoRepository` 通过扩展`MongoRepository<T, ID>`接口的方式快速获得CRUD功能支持,无需编写具体实现逻辑即可完成对特定类型的增删改查操作。这里展示了一个简单的仓库接口声明——`CommentRepository.java`: ```java package com.example.demo_mongodb.dao; import com.example.demo_mongodb.po.Comment; import org.springframework.data.mongodb.repository.MongoRepository; public interface CommentRepository extends MongoRepository<Comment, String> { } ``` 上述代码片段展示了如何利用Spring Data JPA提供的特性轻松地与MongoDB交互,从而专注于业务逻辑而非底层细节处理[^5]。 #### 测试服务层方法验证整合效果 最后一步是在控制器或者其他组件里注入之前建立好的仓储接口,并调用相应的方法来进行测试。这有助于确认整个系统的连通性和预期行为的一致性。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值