当前位置: 移动技术网 > IT编程>开发语言>Java > Spring Boot 整合 MongoDB的示例

Spring Boot 整合 MongoDB的示例

2020年10月26日  | 移动技术网IT编程  | 我要评论
本节使用springboot 2.1.9.release,示例源码在springboot可以非常方便地引入和操作mongodb。本节分两部分,记录个人学习springboot使用mongodb数据库的

本节使用springboot 2.1.9.release,示例源码在

springboot可以非常方便地引入和操作mongodb。本节分两部分,记录个人学习springboot使用mongodb数据库的一些知识。

第一部分是一个简单的springboot连接mongo的demo,测试查询功能。

第二部分是基于mongo实现的增删改查数据示例。

本节使用springboot 2.1.9.release

一、a simple demo

首先来演示springboot项目引入mongodb,以及一个简单的findall操作。

maven依赖:

<dependency>
   <groupid>org.springframework.boot</groupid>
   <artifactid>spring-boot-starter-data-mongodb</artifactid>
</dependency>

环境配置:

application.yml文件中写入如下配置,test表示mongodb中的test表

spring:
 data:
  mongodb:
   uri: "mongodb://localhost:27017/test"

以一个bean类为例:

package com.example;

public class user {

  private string id;
  private string name;
  private integer age;
  private integer grade;

  // ... ignore getter and setter


  // override its tostring method
  @override
  public string tostring() {
    return "user{" +
        "id='" + id + '\'' +
        ", name='" + name + '\'' +
        ", age=" + age +
        ", grade=" + grade +
        '}';
  }
}

在mongodb数据库中新建一个collection(也就是表),名字叫user,插入几条数据,比如:

注:这里用的可视化工具是robo 3t:

我们这里先默认javabean的字段与user表的字段名保持一致。

下面我们编写测试类:

@springboottest
@runwith(springrunner.class)
public class mongotest {

  @autowired
  private mongotemplate mongotemplate;

  @test
  public void test1() {
    list<user> userlist = mongotemplate.findall(user.class);
    if (userlist != null && userlist.size() > 0) {
      userlist.foreach(user -> {
        system.out.println(user.tostring());
      });
    }
  }

}

运行测试类,输出如下:

user{id='5d243534514701183f5fcab8', name='zf0', age=12, grade=1}
user{id='5d243534514701183f5fcab9', name='zf1', age=13, grade=2}
user{id='5d243534514701183f5fcaba', name='zf2', age=14, grade=3}
user{id='5d243534514701183f5fcabb', name='zf3', age=15, grade=4}
user{id='5d243534514701183f5fcabc', name='zf4', age=16, grade=5}

二、基于springboot的mongodb增删改查操作

下面来实现一个基于springboot的对mongodb增删改查操作的简单示例,依然使用上面的环境:

maven:

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-web</artifactid>
</dependency>

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-test</artifactid>
  <scope>test</scope>
</dependency>

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-data-mongodb</artifactid>
</dependency>

<dependency>
  <groupid>com.alibaba</groupid>
  <artifactid>fastjson</artifactid>
  <version>1.2.60</version>
</dependency>

yml:

server:
 port: 8866

spring:
 data:
  mongodb:
   uri: "mongodb://localhost:27017/test"

user类:

这里我们清楚一下之前的数据,把mongo里的user表里的数据全部删掉。

注:这里用的可视化工具admin-mongo:https://github.com/mrvautin/adminmongo

新建一个不同的user类:

@document("user")
public class user {

  @id
  private string id;

  @field("name")
  private string name;

  @field("password")
  private string password;

  @field("address")
  private string address;

  @field("create_time")
  private date createtime;

  @field("last_update_time")
  private date lastupdatetime;

  // ... ignore getter and setter methods

  @override
  public string tostring() {
    return jsonobject.tojsonstring(this);
  }
}

此处定义一个jsonresult类,用于封装接口返回数据:

import com.alibaba.fastjson.jsonobject;

import java.util.hashmap;
import java.util.map;

public class jsonresult {

  /**
   * 未登录
   */
  public static final int no_login = 400;

  /**
   * 登录失败
   */
  public static final int login_failed = 401;

  /**
   * token过期
   */
  public static final int token_expired = 402;

  /**
   * 无权限
   */
  public static final int no_permission = 403;


  private boolean success;
  private integer code;
  private string msg;
  private object data;

  public jsonresult(boolean success) {
    this.success = success;
  }

  public jsonresult(boolean success, string msg) {
    this.success = success;
    this.msg = msg;
  }

  public jsonresult(integer code, boolean success, string msg) {
    this.code = code;
    this.success = success;
    this.msg = msg;
  }

  public jsonresult(boolean success, object data) {
    this.success = success;
    this.data = data;
  }

  public jsonresult(boolean success, integer code, string msg, object data) {
    this.success = success;
    this.code = code;
    this.msg = msg;
    this.data = data;
  }

  // ... ignore getter and setter methods

  public void put(string key, object value) {
    if (data == null) {
      data = new hashmap<>();
    }
    ((map) data).put(key, value);
  }

  public void putall(map<string, object> map) {
    if (data == null) {
      data = new hashmap<>();
    }
    ((map) data).putall(map);
  }

  @override
  public string tostring() {
    return jsonobject.tojsonstring(this);
  }
}

下面编写测试接口类,实现用户的新增、删除、更新、查询功能

usercontroller类:

@restcontroller
@requestmapping(value = "user")
public class usercontroller {

  @autowired
  private mongotemplate mongotemplate;

  @getmapping(value = "")
  public jsonresult list() {
    list<user> userlist = mongotemplate.findall(user.class, "user");
    return new jsonresult(true, userlist);
  }

  @postmapping(value = "")
  public jsonresult add(user user) {
    string msg = verifysaveform(user);
    if (!stringutils.isempty(msg)) {
      return new jsonresult(false, msg);
    }

    if (user.getid() == null) {
      user.setcreatetime(new date());
      user.setlastupdatetime(new date());
      user newuser = mongotemplate.insert(user, "user");
      return new jsonresult(true, newuser);
    } else {
      query query = new query();
      query.addcriteria(criteria.where("_id").is(user.getid()));

      update update = new update();
      update.set("name", user.getname());
      update.set("password", user.getpassword());
      update.set("address", user.getaddress());
      update.set("last_update_time", new date());

      updateresult updateresult = mongotemplate.updatefirst(query, update, "user");
      return new jsonresult(true, updateresult);
    }
  }

  @deletemapping(value = "{id}")
  public jsonresult delete(@pathvariable string id) {
    query query = new query();
    query.addcriteria(criteria.where("_id").is(id));
    deleteresult deleteresult = mongotemplate.remove(query, user.class, "user");
    return new jsonresult(true, deleteresult);
  }

  // private methods

  private string verifysaveform(user user) {
    if (user == null || stringutils.isempty(user.getname())) {
      return "用户名不能为空";
    } else if (user.getpassword() == null) {
      return "密码不能为空";
    }

    return null;
  }
}

下面用postman模拟一下请求:

新增用户:

查看mongodb:

更改数据,新增多个用户:

列表查询:

更改user:

删除user:

好,到此为止,我们已经在springboot项目中引入了mongodb,并实现了基本的增删改查操作,这将是我们使用mongodb开发更加复杂的业务的基础!

以上就是spring boot 整合 mongodb的示例的详细内容,更多关于spring boot 整合 mongodb的资料请关注移动技术网其它相关文章!

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网