学习笔记(四)、MongoDB入门使用以及Spring Boot 整合操作

近日学习了MongoDB的简单入门使用回顾复习下:

一、MongoDB简介:

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组

官方网站:http://www.mongodb.org/

二、 与关系型数据库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+"[email protected]").
                    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 测试截图:

新增实体:

学习笔记(四)、MongoDB入门使用以及Spring Boot 整合操作

全部实体列表:

学习笔记(四)、MongoDB入门使用以及Spring Boot 整合操作

 截图不一一再次展示了,其中主键Id 如果我们没有手动填充id,mongodb 会为我们自己生成id,关于Spring Data MongoDB的条件查询和分页查询参考Spring Data JPA 中的操作规范:https://blog.csdn.net/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/