springboot整合MongoDB(简单demo实现包含注意点及踩坑)

文章介绍了如何在SpringBoot应用中添加MongoDB数据存储支持,包括添加Maven依赖、配置类实现以避免自动添加_class字段,创建实体类,以及定义Service实现数据插入操作。
摘要由CSDN通过智能技术生成

1️⃣:加maven坐标

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

2️⃣:配置类实现

package com.todoitbo.tallybookdasmart.config;

import lombok.NonNull;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.convert.MongoConverter;

import javax.annotation.Resource;

/**
 * @author xiaobo
 * @date 2022/12/5
 * @info 此类若不加,那么插入的一行会默认添加一个_class字段来存储实体类类型 如(com.example.demo.entity.Student)
 */
@Configuration
public class MongoDbListener implements ApplicationListener<ContextRefreshedEvent> {

    @Resource
    MongoTemplate mongoTemplate;

    private static final String TYPEKEY = "_class";

    @Override
    public void onApplicationEvent(@NonNull ContextRefreshedEvent contextRefreshedEvent) {
        MongoConverter converter = mongoTemplate.getConverter();
        if (converter.getTypeMapper().isTypeKey(TYPEKEY)) {
            ((MappingMongoConverter) converter).setTypeMapper(new DefaultMongoTypeMapper(null));
        }
    }
}

3️⃣:实体类

package com.todoitbo.tallybookdasmart.entity;

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

import java.io.Serializable;

/**
 * @author xiaobo
 * @date 2022/12/5
 */
@Data
@Document(collection = "sys_exception_log")
public class SysExceptionLog implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    /*** 自定义mongo主键 加此注解可自定义主键类型以及自定义自增规则
     *  若不加 插入数据数会默认生成 ObjectId 类型的_id 字段
     *  org.springframework.data.annotation.Id 包下
     *  mongo库主键字段还是为_id (本文实体类中字段为为id,意思查询字段为_id,但查询结果_id会映射到实体对象id字段中)
     */
    @Id
    private Long id;

    /**
     * 操作时间
     */
    private Long createTime;
}

4️⃣:service实现

package com.todoitbo.tallybookdasmart.service.impl;

import com.todoitbo.tallybookdasmart.entity.SysExceptionLog;
import com.todoitbo.tallybookdasmart.service.ISysExceptionLogService;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @author xiaobo
 * @date 2022/12/5
 */
@Service
public class SysExceptionLogServiceImpl implements ISysExceptionLogService {

    @Resource
    private MongoTemplate mongoTemplate;

    @Override
    public void insertSysExceptionLog(SysExceptionLog sysExceptionLog){
        mongoTemplate.insert(sysExceptionLog);
    }
}

🔚:简单的实现到此结束

package dzs.com.MongoDB; import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; public class MongoDBJDBC { private static String uri ="mongodb://dzs:123456@127.0.0.1:27017/test"; @SuppressWarnings("deprecation") public static void main(String[] args){ try { //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址 //ServerAddress()两个参数分别为 服务器地址 和 端口 ServerAddress serverAddress = new ServerAddress("localhost",27017); List<ServerAddress> addrs = new ArrayList<ServerAddress>(); addrs.add(serverAddress); //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码 MongoCredential credential = MongoCredential.createScramSha1Credential("admin", "test", "123456".toCharArray()); List<MongoCredential> credentials = new ArrayList<MongoCredential>(); credentials.add(credential); //1、通过连接认证获取MongoDB连接 MongoClient mongoClient = new MongoClient(addrs,credentials); MongoDatabase mongoDatabase = mongoClient.getDatabase("test"); System.out.println("1--Connect to database successfully"); //2、通过uri方式连接MongoDB uri根据选择的数据库修改登录用户dzs MongoClientURI mongoClientUri =new MongoClientURI(uri); MongoClient mongoclient =new MongoClient(mongoClientUri); //连接到数据库 MongoDatabase mongoDatabase2 = mongoclient.getDatabase("test"); System.out.println("2--Connect to database successfully"); //使用test数据库,如果不存在会自动创建 MongoCollection<Document> collection = mongoDatabase2.getCollection("test"); System.out.println("集合 test 选择成功"); /**插入文档 * 1. 创建文档 org.bson.Document 参数为key-value的格式 * 2. 创建文档集合List<Document> * 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document) * */ Document document = new Document("title", "MongoDB"). append("description", "database"). append("likes", 100). append("by", "Fly"); List<Document> documents = new ArrayList<Document>(); documents.add(document); collection.insertMany(documents); System.out.println("文档插入成功"); /**检索所有文档 * 1. 获取迭代器FindIterable<Document> * 2. 获取游标MongoCursor<Document> * 3. 通过游标遍历检索出的文档集合 * */ FindIterable<Document> findIterable = collection.find(); MongoCursor<Document> mongoCursor = findIterable.iterator(); while (mongoCursor.hasNext()) { System.out.println(mongoCursor.next()); } System.out.println("检索所有文档成功"); //更新文档 将文档中likes=100的文档修改为likes=200 collection.updateMany(Filters.eq("likes", 100), new Document("$set", new Document("likes", 200))); //检索查看结果 findIterable = collection.find(); mongoCursor = findIterable.iterator(); while (mongoCursor.hasNext()) { System.out.println(mongoCursor.next()); } System.out.println("更新文档成功"); //删除符合条件的第一个文档 collection.deleteOne(Filters.eq("likes", 200)); //删除所有符合条件的文档 collection.deleteMany(Filters.eq("likes", 200)); //检索查看结果 findIterable = collection.find(); mongoCursor = findIterable.iterator(); while (mongoCursor.hasNext()) { System.out.println(mongoCursor.next()); } System.out.println("删除文档成功"); } catch (Exception e) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } } }
非常感谢您的问题,以下是一个Spring Boot整合MongoDB的示例: 1. 添加Mongodb依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> ``` 2. 在application.properties文件中添加MongoDB的配置: ``` spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=test ``` 3. 创建一个实体类作为MongoDB的文档对象: ``` @Document(collection = "users") public class User { @Id private String id; private String name; private String email; // getters and setters } ``` 4. 创建一个MongoDB的Repository接口: ``` @Repository public interface UserRepository extends MongoRepository<User, String> { User findByName(String name); List<User> findByEmailLike(String email); } ``` 5. 在Spring Boot应用程序的服务类中使用Repository: ``` @Service public class UserService { @Autowired private UserRepository userRepository; public User getUserByName(String name) { return userRepository.findByName(name); } public List<User> getUsersByEmail(String email) { return userRepository.findByEmailLike(email); } } ``` 6. 在Spring Boot应用程序的控制器中调用服务: ``` @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping("/{name}") public User getUserByName(@PathVariable String name) { return userService.getUserByName(name); } @GetMapping("/emails/{email}") public List<User> getUsersByEmail(@PathVariable String email) { return userService.getUsersByEmail(email); } } ``` 上述示例演示了如何使用Spring BootMongoDB进行集成,创建文档对象和存储文档数据,并编写了数据访问逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只牛博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值