IDEA版本其实也差不多的,大同小异

简单Demo地址:

https://blog.csdn.net/shirukai/article/details/82152243

Springboot项目整合MongoDB

本文主要记录在Springboot项目中整合MongoDB,并演示增删改查,以及分页查询。

1 整合MongoDB

1.1 引入依赖

在sparingboot项目中引入MongoDB依赖

<!--mongodb-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
1
2
3
4
5
1.2 MongoDB配置

引入依赖之后,需要在springboot配置中,加入MongoDB的配置信息。

这里我使用的springboot项目的配置文件是yml格式的,配置内容如下:

spring:
data:
mongodb:
uri: mongodb://192.168.162.128:27017/local?maxPoolSize=256
1
2
3
4
如果为properties格式,添加内容如下:

spring.data.mongodb.uri=mongodb://192.168.162.128:27017/local?maxPoolSize=256

Eclipseproperties格式:

spring.data.mongodb.uri=mongodb://localhost:27017/dasoujia?maxPoolSize=256

1
uri格式解释

mongodb://用户名:密码@连接地址:端口/数据库名
1
2 MongoDB的CRUD操作

2.1 entity层

java实体类用来映射MongoDB中的Collection

如:我们创建一个User的实体类,里面包含id、userName、password字段。

package com.springboot.demo.mongo.entity;

import org.springframework.data.mongodb.core.mapping.Field;

import java.io.Serializable;

/**
* Created by shirukai on 2018/8/8
*/
public class User implements Serializable {
private static final long serialVersionUID = -3258839839160856613L;
@Field("id")
private Long id;
@Field("user_name")
private String userName;
@Field("password")
private String password;

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 String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
'}';
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2.2 dao层

DAO层主要提供对MongoBD的基础操作 如增删改查等。

2.2.1 添加操作

对MongoDB的添加,主要是调到mongoTemplate的save()方法,首相通过Spring注入mongoTemplate。

//注入mongoTemplate
@Autowired
private MongoTemplate mongoTemplate;

/**
* 保存user
*
* @param user user
*/
public void saveUser(User user) {
mongoTemplate.save(user);
}
1
2
3
4
5
6
7
8
9
10
11
12
2.2.2 删除操作

调用mongoTemplate中的remove()方法实现删除操作

/**
* 删除user
*
* @param id id
*/
public void deleteUserById(Long id) {
Query query = new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query, User.class);
}
1
2
3
4
5
6
7
8
9
2.2.3 修改操作

调用mongoTemplate中的update()方法实现修改操作

/**
* 更新user
*
* @param user 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("password", user.getPassword());
mongoTemplate.updateFirst(query, update, User.class);
}
1
2
3
4
5
6
7
8
9
10
2.2.4 查找操作

调用mongoTemplate中的findOne()方法实现查找操作

/**
* 根据用户名查询user
*
* @param userName userName
* @return user
*/
public User findUserByUserName(String userName) {
Query query = new Query(Criteria.where("userName").is(userName));
return mongoTemplate.findOne(query, User.class);
}
1
2
3
4
5
6
7
8
9
10
11
2.2.5 分页查找

2.2.5.1 创建PageModel类

package com.springboot.demo.mongo.page;

import org.springframework.data.domain.Sort;

import java.io.Serializable;

/**
* Created by shirukai on 2018/8/8
*/
public class PageModel implements Serializable {
private static final long serialVersionUID = -3258839839160856613L;
private Integer pagenumber = 1;
private Integer pagesize = 10;
private Sort sort;

public Integer getPagenumber() {
return pagenumber;
}

public void setPagenumber(Integer pagenumber) {
this.pagenumber = pagenumber;
}

public Integer getPagesize() {
return pagesize;
}

public void setPagesize(Integer pagesize) {
this.pagesize = pagesize;
}

public Sort getSort() {
return sort;
}

public void setSort(Sort sort) {
this.sort = sort;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2.2.5.2 创建SpringPageable类

package com.springboot.demo.mongo.page;

import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.io.Serializable;

/**
* Created by shirukai on 2018/8/8
*/
public class SpringPageable implements Pageable, Serializable {
private static final long serialVersionUID = -3258839839160856613L;

private PageModel page;

public PageModel getPage() {
return page;
}

public void setPage(PageModel page) {
this.page = page;
}

@Override
public int getPageNumber() {
return page.getPagenumber();
}

@Override
public int getPageSize() {
return page.getPagesize();
}

@Override
public long getOffset() {
return (page.getPagenumber() - 1) * page.getPagesize();
}

@Override
public Sort getSort() {
return page.getSort();
}

@Override
public Pageable next() {
return null;
}

@Override
public Pageable previousOrFirst() {
return null;
}

@Override
public Pageable first() {
return null;
}

@Override
public boolean hasPrevious() {
return false;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2.2.5.2 在DAO层实现分页方法

/**
* 分页查询
* @param pageNum 页数
* @param pageSize 每页数量
* @param sortField 排序字段
* @return pages
*/
public Page<User> findUserPagination(Integer pageNum, Integer pageSize, String sortField) {
SpringPageable pageable = new SpringPageable();
PageModel pm = new PageModel();
Query query = new Query();
Sort sort = new Sort(Sort.Direction.DESC, sortField);
pm.setPagenumber(pageNum);
pm.setPagesize(pageSize);
pm.setSort(sort);
pageable.setPage(pm);
Long count = mongoTemplate.count(query, User.class);
List<User> list = mongoTemplate.find(query.with(pageable), User.class);
return new PageImpl<>(list, pageable, count);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2.2.6 DAO层完成代码

package com.springboot.demo.mongo.dao;

import com.springboot.demo.mongo.entity.User;
import com.springboot.demo.mongo.page.PageModel;
import com.springboot.demo.mongo.page.SpringPageable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Sort;
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 java.util.List;

/**
* Created by shirukai on 2018/8/8
*/
@Component
public class UserDao {
@Autowired
private MongoTemplate mongoTemplate;

/**
* 保存user
*
* @param user user
*/
public void saveUser(User user) {
mongoTemplate.save(user);
}

/**
* 根据用户名查询user
*
* @param userName userName
* @return user
*/
public User findUserByUserName(String userName) {
Query query = new Query(Criteria.where("userName").is(userName));
return mongoTemplate.findOne(query, User.class);
}

/**
* 更新user
*
* @param user 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("password", user.getPassword());
mongoTemplate.updateFirst(query, update, User.class);
}

/**
* 删除user
*
* @param id id
*/
public void deleteUserById(Long id) {
Query query = new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query, User.class);
}

/**
* 分页查询
* @param pageNum 页数
* @param pageSize 每页数量
* @param sortField 排序字段
* @return pages
*/
public Page<User> findUserPagination(Integer pageNum, Integer pageSize, String sortField) {
SpringPageable pageable = new SpringPageable();
PageModel pm = new PageModel();
Query query = new Query();
Sort sort = new Sort(Sort.Direction.DESC, sortField);
pm.setPagenumber(pageNum);
pm.setPagesize(pageSize);
pm.setSort(sort);
pageable.setPage(pm);
Long count = mongoTemplate.count(query, User.class);
List<User> list = mongoTemplate.find(query.with(pageable), User.class);
return new PageImpl<>(list, pageable, count);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
2.2 测试类

package com.springboot.demo.mongo.dao;

import com.springboot.demo.mongo.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.test.context.junit4.SpringRunner;

/**
* Created by shirukai on 2018/8/8
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserDaoTest {

@Autowired
UserDao userDao;

@Test
public void saveUser() {
User user = new User();
for (int i = 0; i < 100; i++) {
user.setId((long) (100 + i));
user.setUserName("hollysys_" + i);
user.setPassword("123456a?");
userDao.saveUser(user);
System.out.println("insert:" + i);
}
}

@Test
public void findUserByUserName() {
User user = userDao.findUserByUserName("shirukai");
System.out.println(user);
}

@Test
public void updateUser() {
User user = new User();
user.setId(1L);
user.setUserName("hollysys");
user.setPassword("123456a?");
userDao.updateUser(user);

}

@Test
public void deleteUser() {
userDao.deleteUserById(1L);
}

@Test
public void findUserPagination() {
Page<User> userPages = userDao.findUserPagination(1, 5, "id");
userPages.forEach(u -> {
System.out.println(u);
});
}
}

Springboot整合MongoDB(Eclipse版本)的更多相关文章

  1. Springboot整合MongoDB的Docker开发,其它应用也类似

    1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. ...

  2. Springboot 整合 MongoDB

    Springboot 整合 MongoDB 这节我们将整合 Spring Boot 与 Mongo DB 实现增删改查的功能,并且实现序列递增. Mongo DB 的基本介绍和增删改查的用法可以参考我 ...

  3. SpringBoot 整合 MongoDB 实战介绍

    一.介绍 在前面的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,在 MongoDB 中有三个比较重要的名词:数据库.集合.文档! 数据库(D ...

  4. java操作mongodb & springboot整合mongodb

    简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...

  5. SpringBoot整合mongoDB

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 这一片文章介绍一个springboot整合mongodb,如果你了解整合mysql之类的 ...

  6. SpringBoot 整合mongoDB并自定义连接池

    SpringBoot 整合mongoDB并自定义连接池 得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它 ...

  7. 8、SpringBoot整合之SpringBoot整合MongoDB

    SpringBoot整合MongoDB 一.创建项目,选择依赖 仅选择Spring Web.Spring Data MongoDB即可 二.引入相关依赖(非必要) 这里只是为了实体类的创建方便而引入l ...

  8. SpringBoot非官方教程 | 第八篇:springboot整合mongodb

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot8-mongodb/ 本文出自方志朋的博客 这篇文 ...

  9. SpringBoot整合MongoDB,在多数据源下实现事务回滚。

    项目中用到了MongoDB,准备用来存储业务数据,前提是要实现事务,保证数据一致性,MongoDB从4.0开始支持事务,提供了面向复制集的多文档事务特性.能满足在多个操作,文档,集合,数据库之间的事务 ...

随机推荐

  1. Django笔记&教程 4-2 模型(models)中的Field(字段)

    Django 自学笔记兼学习教程第4章第2节--模型(models)中的Field(字段) 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref ...

  2. cesium开发(1)搭建 vue + cesium开发环境

    进入新公司一段时间了,新公司业务主要从事卫星方面等webgl的开发,主要使用了leafletjs和cesium,其中cesium难度较大,需求较多,再进行了一段时间的使用开发后依旧感到有些力不从心, ...

  3. 如何删除一个win10的服务

    使用场景: 之前电脑玩腾讯qq微端游戏,后来卸载残留服务一直在后台占用系统资源.那么如何关闭这个服务呢. 1.首先 管理员运行--cmd.exe 2.打开任务管理器,找到服务名称,如果服务开启可以关闭 ...

  4. 主动扫描之Nmap

    主动扫描之Nmap 本文参考于李华峰等人的图书<Kali Linux2 网络渗透测试实践指南>2018年第1版 目录 主动扫描之Nmap 基本用法 主机发现 端口发现 扫描目标操作系统 扫 ...

  5. NLP获取词向量的方法(Glove、n-gram、word2vec、fastText、ELMo 对比分析)

    自然语言处理的第一步就是获取词向量,获取词向量的方法总体可以分为两种两种,一个是基于统计方法的,一种是基于语言模型的. 1 Glove - 基于统计方法 Glove是一个典型的基于统计的获取词向量的方 ...

  6. SP20173 DIVCNT2 - Counting Divisors (square)

    Refer 主要思路参考了 Command_block 的题解. Description 给定 \(n\)(\(n\le 10^{10}\)),求 \[\sum_{i=1}^n\sigma_0(i^2 ...

  7. VSCode + PicGo + Github + jsDelivr 搭建稳定快速高效图床

    VSCode + PicGo + Github + jsDelivr 搭建稳定快速高效图床 目录 前言 准备 配置 验证 前言 所谓图床,就是将图片储存到第三方静态资源库中,其返回给你一个 URL 进 ...

  8. 【机器学习与R语言】5-规则学习算法

    目录 1.分类规则原理 1.1 1R单规则算法 1.2 RIPPER算法 2. 规则学习应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估性能 5)提高性能 6)选择决策树中的分类规则 ...

  9. python-django-查询详解

    倒数第二条性质可以实现链式的调用,通过第一次的过滤还可以再过滤倒数第一条就是结果集从数据库中查询出来之后不会再进行数据库的查询的我们使用的object就是模型管理器manager的一个对象 obj = ...

  10. sersync+rsync进行数据同步

    一:环境 操作系统环境:redhat6.6 内核版本:2.6.32-358.el6.x86_64 rsync server:192.168.2.3(部署rsync server) rsync clie ...