近日学习了MongoDB的简单入门使用回顾复习下:
一、MongoDB简介:
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组
二、 与关系型数据库MySQL逻辑结构概念对比:
MongoDB | MySQL |
---|---|
数据库(databases) | 数据库(databases) |
集合(collections) | 表(table) |
文档(document) | 行(row) |
MongoDB的安装这里就不赘述了,下面主要介绍Java代码操作MongoDB数据库
三、MongoDB Java
添加依赖:
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.6.3</version>
</dependency>
</dependencies>
Java操作MongoDB Demo:
package mongoDemo;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.*;
/**
* @author WDG
* @date 2019-2-8
*/
public class MongoDBDemo {
public static void main(String[] args) {
//连接到 mongodb 服务
MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
//选择连接的数据库,不存在会默认创建一个
MongoDatabase dbdemo = mongoClient.getDatabase("mongoDemo");
System.out.println("连接数据库成功");
//新建集合命名为user_info,如果该集合存在,则使用。否则新建集合
MongoCollection<Document> collection = dbdemo.getCollection("user_info");
System.out.println("创建集合成功");
//插入文档
/**
* 1. 创建文档 org.bson.Document 参数为key-value的格式
* 2. 创建文档集合List<Document>
* 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document)
* */
Document document ;
List<Document> documents = new ArrayList<Document>();
for (int i=1;i<=10;i++){
document = new Document("username", "Jack"+i).
append("description", "loser"+i).
append("email", i+"10@126.com").
append("age", 20+i).
append("birth",new Date());
documents.add(document);
}
collection.insertMany(documents);
System.out.println("文档插入成功");
//获取文档信息
FindIterable<Document> fileList = collection.find();
MongoCursor<Document> iterator = fileList.iterator();
while (iterator.hasNext()){
Document next = iterator.next();
System.out.println("_id:"+next.get("_id")+"\n"
+ "username:"+next.get("username")+"\n"
+"description:"+next.get("description")+"\n"
+"email:"+next.get("email")+"\n"
+"age:"+next.get("age")+"\n"
+"birth:"+next.get("birth")+"\n");
}
mongoClient.close();
}
}
四、Spring Data MongoDB
SpringData家族成员之一,用于操作MongoDb的持久层框架,封装了底层的mongodbdriver。
官方文档:https://docs.spring.io/spring-data/mongodb/docs/2.1.4.RELEASE/reference/html/
Spring Boot 入门使用 Spring Data MongoDB:
1、pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.wdg</groupId>
<artifactId>springdatamongodb</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
2、application.yml:
server:
port: 8081
spring:
data:
mongodb:
host: 127.0.0.1
database: mongoDemo
3、启动类RunApplication.java:
package com.springdatamongodb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author WDG
* @date 2019-2-8
*/
@SpringBootApplication
public class RunApplication {
public static void main(String[] args) {
SpringApplication.run(RunApplication.class,args);
}
}
4、实体类User.java:
package com.springdatamongodb.pojo;
import org.springframework.data.annotation.Id;
import java.util.Date;
/**
* @author WDG
* @date 2019-2-8
*/
public class User {
@Id
private String id;
private String username;
private String description;
private String email;
private int age;
private Date birth;
//setter and getter...
}
5、dao层:
package com.springdatamongodb.repository;
import com.springdatamongodb.pojo.User;
import org.springframework.data.mongodb.repository.MongoRepository;
/**
* @author WDG
* @date 2019-2-8
*/
public interface UserRepository extends MongoRepository<User,String> {
}
6、service层:
package com.springdatamongodb.service;
import com.springdatamongodb.pojo.User;
import com.springdatamongodb.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* @author WDG
* @date 2019-2-8
*/
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
/**
* 查询全部列表
* @return
*/
public List<User> findAll(){
return userRepository.findAll();
}
/**
* 根据主键查询实体
* @param id
* @return
*/
public User findUserById(String id){
return userRepository.findById(id).get();
}
/**
* 新增实体
* @param user
*/
public void saveUser(User user){
user.setBirth(new Date());
userRepository.save(user);
}
/**
* 根据主键删除实体
* @param id
*/
public void deleteById(String id){
userRepository.deleteById(id);
}
/**
* 修改实体信息
* @param user
*/
public void updateUser(User user){
user.setBirth(new Date());
userRepository.save(user);
}
}
7、controller层:
package com.springdatamongodb.controller;
import com.springdatamongodb.pojo.User;
import com.springdatamongodb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author WDG
* @date 2019-2-8
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 查询全部列表
* @return
*/
@GetMapping("/findAll")
public List<User> findAll(){
return userService.findAll();
}
/**
* 根据主键查询实体
* @param id
* @return
*/
@GetMapping("/findById/{id}")
public User findUserById(@PathVariable String id){
return userService.findUserById(id);
}
/**
* 新增实体
* @param user
*/
@PostMapping("/save")
public Map<String,Object> saveUser(@RequestBody User user){
Map<String,Object> map = new HashMap<>();
try {
map.put("message","新增成功");
userService.saveUser(user);
}catch (Exception e){
e.printStackTrace();
map.put("errMsg","新增失败");
}
return map;
}
/**
* 根据主键删除实体
* @param id
*/
@DeleteMapping("/delete/{id}")
public Map<String,Object> deleteById(@PathVariable String id){
Map<String,Object> map = new HashMap<>();
try {
userService.deleteById(id);
map.put("message","删除成功");
}catch (Exception e){
e.printStackTrace();
map.put("errMsg","删除失败");
}
return map;
}
/**
* 修改实体信息
* @param user
*/
@PutMapping("/edit")
public Map<String,Object> updateUser(@RequestBody User user){
Map<String,Object> map = new HashMap<>();
try {
userService.updateUser(user);
map.put("message","修改成功");
}catch (Exception e){
e.printStackTrace();
map.put("errMsg","修改失败");
}
return map;
}
}
8、postman 测试截图:
新增实体:
全部实体列表:
截图不一一再次展示了,其中主键Id 如果我们没有手动填充id,mongodb 会为我们自己生成id,关于Spring Data MongoDB的条件查询和分页查询参考Spring Data JPA 中的操作规范:https://blog.youkuaiyun.com/wdg2333/article/details/86764380
参考文档:
https://www.runoob.com/mongodb/mongodb-java.html
https://docs.spring.io/spring-data/mongodb/docs/2.1.4.RELEASE/reference/html/