IDEA版本其實也差很少的,大同小異
簡單Demo地址:
https://blog.csdn.net/shirukai/article/details/82152243java
Springboot項目整合MongoDBspring
本文主要記錄在Springboot項目中整合MongoDB,並演示增刪改查,以及分頁查詢。mongodb
1 整合MongoDB數據庫
1.1 引入依賴springboot
在sparingboot項目中引入MongoDB依賴app
<!--mongodb-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
1
2
3
4
5
1.2 MongoDB配置dom
引入依賴以後,須要在springboot配置中,加入MongoDB的配置信息。ide
這裏我使用的springboot項目的配置文件是yml格式的,配置內容以下:spring-boot
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);
});
}
}