MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
BSON是一种计算机数据交换格式,
主要被用作MongoDB数据库中的数据存储和网络传输格式。
它是一种二进制表示形式,
能用来表示简单数据结构、
关联数组(MongoDB中称为“对象”或“文档”)以及MongoDB中的各种数据类型。
BSON之名缘于JSON,含义为Binary JSON(二进制JSON)。
Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。
通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量。
fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
MongoDB的驱动包,不过多介绍。
以及spring项目的基本依赖等(请自行添加)
import lombok.Data;
//添加 @Data 注解可以自动生成getter和setter方法
//此注解包含在lombok包内
@Data
public class User{
private String username;
private String _id;
private String password;
}
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;
}
}
注意端口号不要写错了,由于端口号写错项目不会终止,而是在控制台输出异常信息,经常会有人因为写错端口号获取不到连接。
@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;
}
}
实现的结构仅有方法名,自行添加
查询部分使用的是迭代器查询
@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结果的返回方式如果有更好的方式请提一下,本人没有研究这方面(尬)
@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("密码错误");
}
}
}
}
首先建立数据库和集合,插入测试用的数据。
使用JSON形式插入进数据库
{
"_id": "123456789",
"username": "张三",
"password": "123456789"
}
关于Mongo数据库可视化管理工具这里使用的是Compass,这里给出官网的下载链接
插入完成之后就可以测试项目了
postman是后端进行测试时常用的工具,
在做接口测试的时候,Postman相当于一个客户端,
它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果,
从而验证响应中的结果数据是否和预期值相匹配;
在postman中新建测试用例
使用POST方式发送JSON数据
将ID和密码发送至服务端
可以在返回的结果中看到Response Body
内容为数据库内的数据
当然在实际的项目中前端发送给后端,以及数据库中储存的密码都是经过加密处理的暗文。