MongoDB使用demo

一、创建 Spring Boot 项目

  1. 使用 Spring Initializr
    访问 Spring Initializr,配置以下参数:

    • Project:Maven Project
    • Language:Java
    • Spring Boot:3.0.x (或最新稳定版)
    • Dependencies
      • Spring Web
      • Spring Data MongoDB
      • Lombok (可选)
  2. 手动添加依赖(如果需要)
    pom.xml中确保以下依赖存在:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <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>
</dependencies>

二、配置 MongoDB 连接

src/main/resources/application.properties中添加 MongoDB 配置:

# MongoDB连接配置
spring.data.mongodb.uri=mongodb://localhost:27017/mydb
  • mydb是数据库名称,如果不存在,MongoDB 会在首次插入数据时自动创建。

三、创建实体类

src/main/java/com/example/mongodbdemo/entity包下创建User类:

package com.example.mongodbdemo.entity;

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

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "users")  // 指定集合名称
public class User {
    
    @Id  // 主键标识
    private String id;
    private String name;
    private Integer age;
    private String email;
}

四、创建 Repository 接口

src/main/java/com/example/mongodbdemo/repository包下创建UserRepository接口:

package com.example.mongodbdemo.repository;

import com.example.mongodbdemo.entity.User;
import org.springframework.data.mongodb.repository.MongoRepository;

import java.util.List;

// 继承MongoRepository接口,提供基本的CRUD方法
public interface UserRepository extends MongoRepository<User, String> {
    
    // 根据名称查询用户(Spring Data自动解析方法名生成查询)
    List<User> findByName(String name);
    
    // 根据年龄范围查询用户
    List<User> findByAgeBetween(Integer minAge, Integer maxAge);
}

五、创建 Service 层

src/main/java/com/example/mongodbdemo/service包下创建UserService接口和实现类:

// UserService.java
package com.example.mongodbdemo.service;

import com.example.mongodbdemo.entity.User;

import java.util.List;

public interface UserService {
    User save(User user);
    User getById(String id);
    List<User> getAll();
    User update(User user);
    void delete(String id);
    List<User> findByName(String name);
}

// UserServiceImpl.java
package com.example.mongodbdemo.service.impl;

import com.example.mongodbdemo.entity.User;
import com.example.mongodbdemo.repository.UserRepository;
import com.example.mongodbdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public User save(User user) {
        return userRepository.save(user);
    }

    @Override
    public User getById(String id) {
        Optional<User> optionalUser = userRepository.findById(id);
        return optionalUser.orElse(null);
    }

    @Override
    public List<User> getAll() {
        return userRepository.findAll();
    }

    @Override
    public User update(User user) {
        // 先检查用户是否存在
        User existingUser = getById(user.getId());
        if (existingUser != null) {
            // 更新字段
            existingUser.setName(user.getName());
            existingUser.setAge(user.getAge());
            existingUser.setEmail(user.getEmail());
            return userRepository.save(existingUser);
        }
        return null;
    }

    @Override
    public void delete(String id) {
        userRepository.deleteById(id);
    }

    @Override
    public List<User> findByName(String name) {
        return userRepository.findByName(name);
    }
}

六、创建 Controller 层

src/main/java/com/example/mongodbdemo/controller包下创建UserController

package com.example.mongodbdemo.controller;

import com.example.mongodbdemo.entity.User;
import com.example.mongodbdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserService userService;

    // 添加用户
    @PostMapping
    public User save(@RequestBody User user) {
        return userService.save(user);
    }

    // 获取单个用户
    @GetMapping("/{id}")
    public User getById(@PathVariable String id) {
        return userService.getById(id);
    }

    // 获取所有用户
    @GetMapping
    public List<User> getAll() {
        return userService.getAll();
    }

    // 更新用户
    @PutMapping
    public User update(@RequestBody User user) {
        return userService.update(user);
    }

    // 删除用户
    @DeleteMapping("/{id}")
    public void delete(@PathVariable String id) {
        userService.delete(id);
    }

    // 根据名称查询用户
    @GetMapping("/search")
    public List<User> findByName(@RequestParam String name) {
        return userService.findByName(name);
    }
}

七、测试 MongoDB 功能

  1. 启动 MongoDB 服务器
    确保本地 MongoDB 服务器已启动:

    bash

    mongod
    
  2. 启动 Spring Boot 应用
    运行MongoDbDemoApplication类的main方法。

  3. 使用 Postman 或 curl 测试 API

    • 添加用户

      bash

      POST http://localhost:8080/api/users
      {
          "name": "张三",
          "age": 25,
          "email": "zhangsan@example.com"
      }
      
    • 获取用户

      bash

      GET http://localhost:8080/api/users/{id}
      
    • 获取所有用户

      bash

      GET http://localhost:8080/api/users
      
    • 更新用户

      bash

      PUT http://localhost:8080/api/users
      {
          "id": "{id}",
          "name": "张三",
          "age": 26,
          "email": "updated@example.com"
      }
      
    • 删除用户

      bash

      DELETE http://localhost:8080/api/users/{id}
      
    • 根据名称查询用户

      bash

      GET http://localhost:8080/api/users/search?name=张三
      

八、项目结构总结

plaintext

mongodb-demo/
├── src/main/java/
│   └── com/example/mongodbdemo/
│       ├── MongoDbDemoApplication.java    # 主应用类
│       ├── controller/                    # 控制器层
│       │   └── UserController.java
│       ├── entity/                        # 实体类
│       │   └── User.java
│       ├── repository/                    # 数据访问层
│       │   └── UserRepository.java
│       └── service/                       # 服务层
│           ├── UserService.java
│           └── impl/
│               └── UserServiceImpl.java
└── src/main/resources/
    └── application.properties             # 配置文件

九、常见问题与解决方案

  1. MongoDB 连接失败

    • 检查 MongoDB 服务器是否运行
    • 确认application.properties中的连接 URI 正确
  2. 数据插入失败

    • 确保实体类字段与 MongoDB 文档字段匹配
    • 检查是否有必填字段未设置
  3. 查询无结果

    • 确认集合名称与@Document注解一致
    • 检查查询条件是否正确
  4. ID 字段问题

    • 使用@Id注解标记主键字段
    • MongoDB 默认使用_id作为主键
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值