MongoDB学习指南:使用springboot+MongoDB实现一个简单的后台登录验证功能

使用MongoDB作为后端数据库进行操作

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

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的

首先是此项目的Maven依赖

BSON是一种计算机数据交换格式,
主要被用作MongoDB数据库中的数据存储和网络传输格式。
它是一种二进制表示形式,
能用来表示简单数据结构、
关联数组(MongoDB中称为“对象”或“文档”)以及MongoDB中的各种数据类型。
BSON之名缘于JSON,含义为Binary JSON(二进制JSON)。

<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>4.6.0</version>

Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。
通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量。

<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>

fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.7</version>

MongoDB的驱动包,不过多介绍。

<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.11</version>

以及spring项目的基本依赖等(请自行添加)

实体类

User.java
import lombok.Data;
//添加 @Data 注解可以自动生成getter和setter方法
//此注解包含在lombok包内
@Data
public class User{
    private String username;
    private String _id;
    private String password;
}
Msg.java 这个实体类是后端返回给前端的信息包
import lombok.Data;
@Data
public class Msg<T> {
    private Integer code;    //状态码
    private String msg;      //返回给前端的文字信息
    private T data;          //返回给前端的数据
    
    public static <T> Msg<T> success(T object){
        Msg<T> msg = new Msg<>();
        msg.data = object;
        msg.code = 1;
        return msg;
    }
    
    public static <T> Msg<T> error(String message){
        Msg msg = new Msg();
        msg.msg=message;
        msg.code = 0;
        return msg;
    }
}

这里写了一个用来获取collection的工具类

DBUtils.java

注意端口号不要写错了,由于端口号写错项目不会终止,而是在控制台输出异常信息,经常会有人因为写错端口号获取不到连接。

@Slf4j
@Service
public class DBUtils {
    //传入集合的名称可以返回可操作的对象
    public static MongoCollection getCollection (String s){
                                                //ip 地址为本机,端口号27017
        MongoClient mongoClient = new MongoClient("localhost",27017);   
                                                //数据库的名称自行更改
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        log.info("获取数据库连接:"+ mongoDatabase);
        MongoCollection<Document> conn = mongoDatabase.getCollection(s);
        log.info("获取集合:" + conn);
        return conn;
    }
}

服务层

UserServiceImpl.java

实现的结构仅有方法名,自行添加
查询部分使用的是迭代器查询

@Service
public class UserServiceImpl implements UserService {
    MongoCollection conn = DBUtils.getCollection("user");
    @Override
    public User findUserById(String _id) {
       FindIterable<Document> iterable = conn.find(new Document("_id",_id));
        MongoCursor<Document> cursor = iterable.iterator();
       if(cursor.hasNext()) {
           Document document = cursor.next();
           return JSON.parseObject(document.toJson(), User.class);
       } else{
            return null;
       }
    }
}

关于document结果的返回方式如果有更好的方式请提一下,本人没有研究这方面(尬)

控制层

UserController.java
@Slf4j
@RestController
public class UserController {
    @Autowired
    UserServiceImpl service ;

    @PostMapping("/login")
    public Msg<User> login(@RequestBody User user){

        if(user!=null) log.info("后端成功接收User对象"+user);
        //user是前端传入的对象,o是数据库中检索到的对象
        User o = service.findUserById(user.get_id());
        if(o==null){
            log.info("用户名不存在");
            return  Msg.error("用户不存在");
        }else {
            if(o.getPassword().equals(user.getPassword())){
                log.info("查询成功"+Msg.success(o));
                return  Msg.success(o);
            }else {
                log.info("密码错误,接受到的密码为:"+user.getPassword()+";正确密码为:"+o.getPassword());
                return Msg.error("密码错误");
            }
        }
    }
}

数据库

MongoDB

首先建立数据库和集合,插入测试用的数据。
使用JSON形式插入进数据库

{
  "_id": "123456789",
  "username": "张三",
  "password": "123456789"
}

关于Mongo数据库可视化管理工具这里使用的是Compass,这里给出官网的下载链接
在这里插入图片描述
插入完成之后就可以测试项目了

项目测试

Postman介绍
postman是后端进行测试时常用的工具,
在做接口测试的时候,Postman相当于一个客户端,
它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果, 
从而验证响应中的结果数据是否和预期值相匹配;
结果测试

在postman中新建测试用例
使用POST方式发送JSON数据
将ID和密码发送至服务端
可以在返回的结果中看到Response Body
内容为数据库内的数据
当然在实际的项目中前端发送给后端,以及数据库中储存的密码都是经过加密处理的暗文。
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值