栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

Spring Boot实战系列(2)数据存储之NoSQL数据库MongoDB

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot实战系列(2)数据存储之NoSQL数据库MongoDB

简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案,官方解释。在NoSql数据库中还是比较优秀的一款数据库,且官方网站现在已经逐步开始支持中文版了。 MongoDB 中文版 https://www.mongodb.com/zh

之前MySql介绍了Spring Data Jpa,对于MongoDB,Spring也提供了强大的支持Spring Data MongoDB,这个项目提供了与MongoDB文档数据库的集成。Spring Data MongoDB 官方文档https://spring.io/projects/spring-data-mongodb

注意 在开始之前先开启你的mongod,对于mongodb安装启动有疑问的可以参考这里 Mac系统下安装MongoDB

快速导航
  • pom.xml增加spring-boot-starter-data-mongodb依赖
  • 修改配置文件 数据库MongoDB相关配置
  • 定义集合模型
  • 创建数据访问对象
  • 创建实例实现对数据的增删改查操作

添加mongodb依赖

项目根目录 pom.xml 添加依赖 spring-boot-starter-data-mongodb


    org.springframework.boot
    spring-boot-starter-data-mongodb

修改配置文件mongodb相关配置
  • mongo2.4以上版本:

    • uri: 数据库链接地址 mongodb://username:password@ip:host
  • mongo2.4以下版本:

    • host: 127.0.0.1
    • port: 27017
    • username: root
    • password: root
    • database: test

application.yml

spring:
    data:
 mongodb:
     uri: mongodb://127.0.0.1:27017
     database: test

定义集合模型

关于Spring Data MongoDB更多注解及使用参考官方文档

在项目启动时候,以下定义的字段会对应到数据库中的数据结构,注意要添加@document注解。

  • @document: 标注于实体类上表明由mongo来维护该集合,默认集合名为类名还可手动指定集合名@document(collection=user)
  • @Id: 主键,自带索引由mongo生成对应mongo中的_id字段(ObjectId)
  • @Indexed: 设置该字段索引,提高查询效率,设置参数(unique=true)为唯一索引,默认为false
package com.angelo;

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

@document
public class User {

    @Id
    private String id;

    @Indexed
    private String name;

    private Integer age;

    @Indexed(unique = true)
    private String idCard;

    public User() {
    }

    // 以下getter、setter方法,代码可以参考本节源码
}

创建继承于mongorepository的数据访问对象

创建UserRepository继承于MongoRepository,当然你也可以使用JpaRepository或MongoRepository,这些接口扩展了mongodb的CRUD操作的通用接口,此外还公开了底层持久化技术的功能,供我们扩展。

例如以下findById,MongoRepository提供的接口为Long类型,显然我这里使用mongodb自动生成的ObjectId,自然是不行了,因此扩展了该方法。

UserRepository.java

package com.angelo;

import org.springframework.data.mongodb.repository.MongoRepository;

import java.util.List;

public interface UserRepository extends MongoRepository {
    User findById(String id);

    List  deleteById(String id);
}

创建控制层实现对数据的增删改查

此处操作Mongodb的增删改查和之前讨论的MySql一样,以下给出代码示例

package com.angelo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    private UserRepository userRepository;

    
    @GetMapping(value = "/user/list")
    public List userList() {
 return userRepository.findAll();
    }

    @GetMapping(value = "/user/info")
    public User findUserById(@RequestParam("id") String id) {
 return userRepository.findById(id);
    }

    
    @PostMapping(value = "/user")
    public User createUser(@RequestBody User params) {
 User user = new User();
 user.setName(params.getName());
 user.setAge(params.getAge());
 user.setIdCard(params.getIdCard());

 return userRepository.save(user);
    }


    
    @PutMapping(value = "/user/{id}")
    public User updateUser(@PathVariable("id") String id, @RequestParam("name") String name, @RequestParam("age") Integer age,
 @RequestParam("idCard") String idCard) {
 User user = new User();
 user.setId(id);
 user.setName(name);
 user.setAge(age);
 user.setIdCard(idCard);

 return userRepository.save(user);
    }

    
    @DeleteMapping(value = "/user/{id}")
    public void deleteUserById(@PathVariable("id") String id) {
 userRepository.deleteById(id);
    }
}

源码地址 https://github.com/Q-Angelo/SpringBoot-Course/tree/master/chapter2/chapter2-2

上篇 Spring Boot实战系列(2)数据存储Jpa操作MySQL

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号