springboot集成MongoDB

本文详细介绍SpringBoot项目中集成MongoDB的过程,包括yml配置、实体类定义、通用IService接口及其实现,以及具体业务Service接口和实现。通过代码示例展示了如何进行数据的增删改查操作。

思路:

Iservice 实现通用方法,增删改查,ServiceImpl实现具体方法。

业务Service接口增加具体业务方法,业务ServiceImpl实现业务Service接口。

声明:

这只是单机版mongoDB,集群模式配置需要修改。

比较公用的方法可以放在IService里面

1 代码实现

1.1 yml文件配置:

spring:
    data:
        mongodb:
            host: IP
            port: 27017
            database: test
            username: test
            password: 123456

1.2 实体类

package com.prepared.service.modules.mongodb.model;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.io.Serializable;

/**
 * mongodb测试用user实体类
 *
 * @date 2019/12/30
 * @author prepared
 */
@Document(collection = "mongoDBUser")
public class MongoDBUser implements Serializable {

        private static final long serialVersionUID = -3258839839160856613L;
        @Id
        private Long id;

        /**
         * 声明username加索引,加快查询速度
         */
        @Indexed
        private String userName;

        @Field("pwd")
        private String passWord;

        public Long getId() {
                return id;
        }

        public void setId(Long id) {
                this.id = id;
        }

        public String getUserName() {
                return userName;
        }

        public void setUserName(String userName) {
                this.userName = userName;
        }

        public String getPassWord() {
                return passWord;
        }

        public void setPassWord(String passWord) {
                this.passWord = passWord;
        }

        @Override
        public String toString() {
                return "UserEntity{" +
                        "id=" + id +
                        ", userName='" + userName + '\'' +
                        ", passWord='" + passWord + '\'' +
                        '}';
        }
}

1.3 定义通用IService

package com.prepared.service.datasource.mongodb;

import java.util.List;

/**
 * MongoDB 通用IService
 *
 * @Author: z
 * @Date: 2019/12/30 15:12
 */
public interface IService<T> {

    /**
     * 保存对象
     *
     * @param t 对象实体
     */
    void saveEntity(T t);

    /**
     * 根据ID修改实体
     *
     * @param t 对象实体
     * @param id 主键
     * @return
     */
    long updateEntityById(T t, Long id);

    /**
     * 根据ID进行删除
     *
     * @param id 主键
     */
    void deleteEntityById(Long id);

    /**
     * 查询所有实体
     *
     * @return
     */
    List<T> findAll();
}

1.4 实现通用IService

package com.prepared.service.datasource.mongodb.impl;

import com.mongodb.client.result.UpdateResult;
import com.prepared.service.datasource.mongodb.IService;
import org.springframework.beans.factory.annotation.Autowired;
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.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

/**
 * mongoDB通用查询实现类
 *
 * @author prepared
 * @date 2019/12/30
 */
@Component
public class ServiceImpl<T> implements IService<T> {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public void saveEntity(T t) {
        mongoTemplate.save(t);
    }

    @Override
    public long updateEntityById(T t, Long id) {
        Type superclass = getClass().getGenericSuperclass();
        Type supertype = ((ParameterizedType) superclass).getActualTypeArguments()[0];
        Class<T> clazz = (Class<T>) supertype;
        Query query = new Query(Criteria.where("id").is(id));
        Update update= new Update();
        //更新查询返回结果集的第一条
        UpdateResult result = mongoTemplate.updateFirst(query, update, clazz);
        if(result!=null) {
            return result.getMatchedCount();
        } else {
            return 0;
        }
    }

    @Override
    public void deleteEntityById(Long id) {
        Type superclass = getClass().getGenericSuperclass();
        Type supertype = ((ParameterizedType) superclass).getActualTypeArguments()[0];
        Class<T> clazz = (Class<T>) supertype;
        Query query = new Query(Criteria.where("id").is(id));
        mongoTemplate.remove(query, clazz);
    }

    @Override
    public List<T> findAll() {
        Type superclass = getClass().getGenericSuperclass();
        Type supertype = ((ParameterizedType) superclass).getActualTypeArguments()[0];
        Class<T> clazz = (Class<T>) supertype;
        return mongoTemplate.findAll(clazz);
    }
}

1.5 使用:

Service接口 继承 IService

public interface UserService extends IService<MongoDBUser> 

serviceImpl,继承 ServiceImpl

public class UserServiceImpl<T> extends ServiceImpl<MongoDBUser> implements UserService

1.6 测试:

@Test
public void testFindUserByUserName() {
	MongoDBUser test = userService.findUserByUserName("test");
	System.out.println("test>>> " + test);
}

@Test
public void testSaveUser() {
	MongoDBUser user = new MongoDBUser();
	user.setId(111L);
	user.setUserName("test");
	user.setPassWord("123");
	userService.saveEntity(user);
	MongoDBUser user2 = new MongoDBUser();
	user2.setId(222L);
	user2.setUserName("test2");
	user2.setPassWord("456");
	userService.saveEntity(user2);
	System.out.println("test>>> " + 1111);
}

@Test
public void testFindAllUser() {
	List<MongoDBUser> allUser = userService.findAll();
	System.out.println("test>>> " + allUser);
}

@Test
public void testFindByName() {
	MongoDBUser allUser = userService.findUserByUserName("test");
	System.out.println("test>>> " + allUser);
}

2 工具

MongoDB 官方可视化界面工具:
在这里插入图片描述

文档:mongodb-compass-1.20.4-win32-x64.exe
链接:http://note.youdao.com/noteshare?id=a531253dc148580135a47e0cea9aa39b&sub=2106F347C6C84EE4ACA887197EDBDDCE

### Spring Boot 整合 MongoDB 示例教程 #### 1. 添加依赖项 为了使 Spring Boot 应用程序能够与 MongoDB 进行交互,需在 `pom.xml` 文件中引入必要的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> ``` 此操作确保应用程序具备访问 MongoDB 所需的功能。 #### 2. 配置 application.yml 文件 对于未设置密码保护的 MongoDB 实例,在 `application.yml` 中可采用如下方式指定连接参数[^3]: ```yaml spring: data: mongodb: uri: mongodb://localhost:27017/testdb ``` 而对于设置了用户名和密码认证的情况,则应按照以下格式编写配置信息[^2]: ```yaml spring: data: mongodb: uri: mongodb://username:password@localhost:27017/mydatabase database: mydatabase ``` 以上两种方法均能有效建立至目标数据库实例的链接。 #### 3. 创建实体类 (Model Class) 定义用于映射文档结构的数据模型。例如创建名为 `User.java` 的 POJO 类来表示用户记录: ```java import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "users") public class User { @Id private String id; private String name; private int age; // Getters and Setters... } ``` 此类通过注解指定了集合名称以及字段属性,便于后续 CRUD 操作。 #### 4. 编写 Repository 接口 利用 Spring Data 提供的支持简化数据存取逻辑。针对上述 `User` 对象构建相应的仓库接口: ```java import org.springframework.data.mongodb.repository.MongoRepository; public interface UserRepository extends MongoRepository<User, String> {} ``` 借助泛型机制自动实现了基本增删改查功能,无需额外编码实现具体业务处理流程。 #### 5. 使用 Service 层封装业务逻辑 最后一步是在服务层调用仓储组件完成实际的任务需求。比如查询所有用户的列表: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> getAllUsers() { return new ArrayList<>(userRepository.findAll()); } } ``` 至此已经完成了整个集成过程的关键环节介绍。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

伍六七AI编程

你猜你给我1分我要不要

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

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

打赏作者

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

抵扣说明:

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

余额充值