zoukankan      html  css  js  c++  java
  • Spring Boot 整合 MongoDB

    一、MongoDB介绍

    MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前noSql数据库产品中最热门的一种。它在许多场景下用于替代传统的关系型数据库或键值对存储方式,MongoDB是用C++开发,MongoDB的官方网址为 http://www.mongodb.org/

    二、MongoDB特点

    1. 特点

    • 面向集合存储,易于存储对象类型的数据
    • 模式自由
    • 支持动态查询
    • 支持完全索引,包含内部对象
    • 支持查询
    • 支持复制和故障恢复
    • 使用高效的二进制数据存储,包括大型对象(如视频等)
    • 自动处理碎片,以支持云计算的扩展性
    • 支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++语言的驱动程序
    • 社区中也提供了对 Erlang 及.NET 等平台的驱动程序
    • 文件存储格式为 BSON(一种 JSON 的扩展)
    • 可通过网络访问

    2. 功能

    • 面向集合的存储:适合存储对象及 JSON 形式的数据
    • 动态查询:MongoDB 支持丰富的查询表达式。查询指令使用 JSON 形式的标记,可轻易
    • 查询文档中内嵌的对象及数组
    • 完整的索引支持:包括文档内嵌对象及数组。MongoDB 的查询优化器会分析查询表达式,并生成一个高效的查询计划 
    • 查询监视:MongoDB 包含一系列监视工具用于分析数据库操作的性能
    • 复制及自动故障转移:MongoDB 数据库支持服务器之间的数据复制,支持主-从模式及
    • 服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移
    • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
    • 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器

    3. 适用场合

    • 网站数据:MongoDB 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性
    • 缓存:由于性能很高,MongoDB 也适合作为信息基础设施的缓存层。在系统重启之后,由 MongoDB 搭建的持久化缓存层可以避免下层的数据源过载
    • 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储
    • 高伸缩性的场景:MongoDB 非常适合由数十或数百台服务器组成的数据库。MongoDB的路线图中已经包含对 MapReduce 引擎的内置支持
    • 用于对象及 JSON 数据的存储:MongoDB 的 BSON 数据格式非常适合文档化格式的存储及查询

     

    三、运行 springboot-mongodb 工程案例

    git clone 下载工程 springboot-learning-example ,项目地址见 GitHub –  https://github.com/zyuQ/springboot-learning-example.git

    1. 安装MongoDB

    详情跳转文章 -> MongoDB安装

    2. 创建数据库

     

    :创建成功之后通过 show dbs 查询数据库。没有test 这个数据库是因为这个数据库目前没有数据,所以没有显示,实际上是已经创建成功了。 

    3. springboot-mongodb 功能代码结构

    org.springboot.controller  -  Controller 层

    org.springboot.dao        -  数据访问层

    org.springboot.pojo     -  实体类

    Application        -  应用启动类

    application.yml       -        应用配置类

    四、springboot-mongodb 工程代码详解

    1. 工程项目Maven依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <!-- MongoDB -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
    </dependencies>

    2. application.yml 加入mongoDB相关配置

    spring:
      data:
        mongodb:
          url: mongodb://localhost:27017/test   # 我用的是本地安装的MongoDB,所以没有用户名和密码。
    #      url: mongodb://name:pass@localhost:27017/test   # name: 用户名, pass: 密码
    #      url: mongodb://192:168:1:1:20000,192:168:1:2:20000,192:168:252:12:20000/test   # 配置多个数据库用,则中间用 “,” 分割

    User.class

    package springboot.pojo;
    
    /**
     * 用户实体类
     */
    public class User {
    
        /**
         * 用户编号
         */
        private Long id;
    
        /**
         * 用户名称
         */
        private String userName;
    
        /**
         * 用户年龄
         */
        private int age;
    
        /**
         * 用户描述
         */
        private String desc;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public void setDesc(String desc) {
            this.desc = desc;
        }
    }

    UserDao.class

    package springboot.dao;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.data.mongodb.core.query.Criteria;
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.data.mongodb.core.query.Update;
    import org.springframework.stereotype.Component;
    import springboot.pojo.User;
    
    import java.util.List;
    
    /**
     * @Description:
     * @Author: zyu
     */
    @Component
    public class UserDao {
    
        @Autowired
        private MongoTemplate mongoTemplate;
    
        /**
         * 创建对象
         * @param user
         */
        public User saveUser(User user) {
            User save = mongoTemplate.save(user);
            return save;
        }
    
    
        /**
         * 更新对象
         * @param user
         */
        public void updateUser(User user) {
            Query query = new Query(Criteria.where("id").is(user.getId()));
            Update update = new Update().set("userName", user.getUserName()).set("age", user.getAge()).set("desc", user.getDesc());
            mongoTemplate.updateFirst(query, update, User.class);
        }
    
    
        /**
         * 根据用户名查询对象
         * @param name
         * @return
         */
        public User findUserByName(String name) {
            Query query = new Query(Criteria.where("userName").is(name));
            User user = mongoTemplate.findOne(query, User.class);
            return user;
        }
    
    
        /**
         * 查询所有对象
         * @return
         */
        public List<User> findUserList() {
            List<User> all = mongoTemplate.findAll(User.class);
            return all;
        }
    
    
        /**
         * 删除对象
         * @param id
         */
        public void deleteUserById(String id) {
            Query query = new Query(Criteria.where("id").is(id));
            mongoTemplate.remove(query, User.class);
        }
    
    }

    HomeController.class

    package springboot.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import springboot.dao.UserDao;
    import springboot.pojo.User;
    
    import java.util.List;
    
    /**
     * @Description:
     * @Author: zyu
     */
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private UserDao userDao;
    
        @GetMapping("/findList")
        public List<User> findUserList() {
            List<User> userList = userDao.findUserList();
            return userList;
        }
    
    
        @GetMapping("/findByName")
        public User findUserByName(@RequestParam String name) {
            User userByName = userDao.findUserByName(name);
            return userByName;
        }
    
    
        @GetMapping("/save")
        public User saveUser(@RequestParam long id,@RequestParam String name, @RequestParam Integer age, @RequestParam String desc) {
            User user = new User();
            user.setUserName(name);
            user.setAge(age);
            user.setDesc(desc);
            user.setId(id);
            return userDao.saveUser(user);
        }
    
    
        @GetMapping("/update")
        public String updateUser(@RequestParam long id, @RequestParam String name, @RequestParam Integer age, @RequestParam String desc) {
            User user = new User();
            user.setUserName(name);
            user.setDesc(desc);
            user.setAge(age);
            user.setId(id);
            userDao.updateUser(user);
            return "Success";
        }
    
    }

    :如果保存的时候不存id,mongo会按照自己的规则分配一个字符串类型的id

    下面我们启动程序进行测试

    1. 新增: http://127.0.0.1:8080/user/save?id=1&name=zyu&age=21&desc=喜欢美食与旅行

    可以看到新增成功

    可以通过命令行: use test 进入 test 这个数据库

    然后通过:db.user.find()  查询user这个文档对象下所有的数据

     

    其他接口大家自己去测试吧

    代码示例

    本文示例读者可以通过查看下面仓库中代码:

  • 相关阅读:
    iphone inline video fragments
    input text focus去掉默认光影
    ios html5 audio 不能自动播放
    跑马灯实现新闻滚动 鼠标放上去停 移开继续滚动
    转:理解WinCE bulid过程
    C语言sendto()函数:经socket传送数据
    WaitForSingleObject用法介绍
    CoInitializeEx()
    转:select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
    setsocketopt()
  • 原文地址:https://www.cnblogs.com/zyulike/p/11958927.html
Copyright © 2011-2022 走看看