一招讓Mongo在Spring中順暢運行

一招讓Mongo在Spring中順暢運行

本文旨在Spring中如何成功連接MongoDB並對其進行增刪改查等操作,由於小編也是剛接觸,對其中的一些原由也不甚瞭解,若有錯誤之處,敬請指正。
一招讓Mongo在Spring中順暢運行

習慣了MySQL在Spring中整合時填寫各種各樣的連接參數,本來只想做一件簡單的數據庫插入查詢而已,翻遍整個互聯網通篇都是複製粘貼抄襲的配置,連接數的多少,超時時間的多少等等。
SprintBoot的出現,秉持約定大於配置的目標,可以使你免去許多配置的煩腦,“約定”即是大多數人都這麼做,你這麼做估計也沒問題,反正就是能跑起來,你要用高級特性也可以也支持自定義配置。所以本文采用SpringBoot力求達到零XML配置。
不得不說,Spring如今已經成爲Java EE事實上的標準,可以說Spring出品必屬精品,其中與數據庫打交道的部分,Spring也替我們做好了封裝,本文操作MongoDB的API不需要自己再在mongo-driver的基礎上再封裝一層,而是直接使用Spring提供的spring-data-mongo模塊,這個模塊加上SpringBoot的結合,淋漓盡致地展現了什麼叫做“約定大於配置”。
  爲了便於注入Bean,我們在maven中引入了以下兩個包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

  SprintBoot的版本號爲2.0.2.RELEASE。
  爲了驗證是否能對MongoDB進行操作,我們還需要再引入Spring的單元測試包:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

起初我想着,這應該需要配置MongoDB的地址、用戶名、密碼什麼的吧,所以我起初寫了一個配置類,企圖使用@Configuration的方式來配置MongoDB連接,後來發現,引入了spring-data-mongo在我們啓動SpringBoot時,已經爲我們創建好了一個默認的MongoDB連接,不需要我們再去重複的配置(當然如果需要更高級的自定義配置也是可以自己配置的),只需要按照格式即可在啓動完成SpringBoot時,自動創建MongoDB連接。
在application.properties中配置以下:
spring.data.mongodb.uri=mongodb://okevin:123456@localhost:27017/recommended

即可通過SpringBoot自動爲我們創建MongoDB連接,在代碼中直接引用MongoTemplate類。
我們先通過MongoDB可視化管理Robo 3T連入對應的數據庫,並在數據庫中新創建一個MongoDB集合“user”,在代碼中需要我們創建一個與之對應的Java實體類User:

1 package com.mongo.domain;
2
3 import lombok.Data;
4 import lombok.ToString;
5 import org.springframework.data.annotation.Id;
6 import org.springframework.data.mongodb.core.mapping.Document;
7 import org.springframework.data.mongodb.core.mapping.Field;
8
9 import java.io.Serializable;
10
11 /
12 @author OKevin
13
@description: MongoDB實體映射類
14 @date 2019-01-06 12:10
15
/
16 @Data
17 @ToString
18 //以上兩個註解使用的是lombok,可減少代碼中getter/setter代碼
19 @Document(collection = "user")
20 public class User implements Serializable {
21
22 private static final long serialVersionUID = 5094995541812833015L;
23 /

24 主鍵使用此註解
25
/
26 @Id
27 private String id;
28
29 /*
30
字段使用此註解
31 */
32 @Field
33 private String name;
34 }

  User實體類對應MongoDB數據庫中的collection集合。
  接下來就是操作MongoDB數據庫中user集合的一些增刪改查具體邏輯,很簡單只需要在類中注入MongoTemplate類即可。

1 package com.mongo.dao;
2
3 import com.mongo.domain.User;
4 import org.springframework.beans.factory.annotation.Autowired;
5 import org.springframework.data.mongodb.core.MongoTemplate;
6 import org.springframework.data.mongodb.core.query.Criteria;
7 import org.springframework.data.mongodb.core.query.Query;
8 import org.springframework.data.mongodb.core.query.Update;
9 import org.springframework.stereotype.Component;
10
11 import java.util.List;
12
13 /
14 @author OKevin
15
@description: 數據層操作類
16 @date 2019-01-06 19:52
17
/
18 @Component
19 public class UserDao {
20
21 @Autowired
22 private MongoTemplate mongoTemplate;
23
24 /

25 保存用戶
26
@param user 返回保存的用戶
27 */
28 public void saveUser(User user) {
29 mongoTemplate.save(user);
30 }
31
32 /
33 根據名字查詢用戶
34
@param name 名字
35 @return 用戶
36
/
37 public List<User> findUserByName(String name) {
38 Query query = new Query(Criteria.where("name").is(name));
39 List<User> users = mongoTemplate.find(query, User.class);
40 return users;
41 }
42
43 /

44 更新用戶
45
@param user 待更新的用戶
46 */
47 public void updateUser(User user) {
48 Query query = new Query(Criteria.where("id").is(user.getId()));
49 Update update = new Update().set("name", user.getName());
50 mongoTemplate.updateFirst(query, update, User.class);
51 }
52
53 /*
54
根據MongoDB的_id刪除用戶
55 @param Id _id
56
/
57 public void deleteUserById(String Id) {
58 Query query = new Query(Criteria.where("id").is(Id));
59 mongoTemplate.remove(query, User.class);
60 }
61 }

  最後是單元測試的代碼:

1 package com.mongo;
2
3 import com.mongo.dao.UserDao;
4 import com.mongo.domain.User;
5 import org.junit.Test;
6 import org.junit.runner.RunWith;
7 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.boot.test.context.SpringBootTest;
9 import org.springframework.context.annotation.ComponentScan;
10 import org.springframework.test.context.ContextConfiguration;
11 import org.springframework.test.context.junit4.SpringRunner;
12
13 import java.util.List;
14
15 @RunWith(SpringRunner.class)
16 @SpringBootTest
17 public class SpringDataMongoDemoApplicationTests {
18
19 @Autowired
20 private UserDao userDao;
21
22 @Test
23 public void contextLoads() {
24 }
25
26 @Test
27 public void testSaveUser() {
28 User user = new User();
29 user.setName("test");
30 userDao.saveUser(user);
31 }
32
33 @Test
34 public void testFindUserByName() {
35 String name = "test";
36 List<User> users = userDao.findUserByName(name);
37 System.out.println(users);
38 }
39
40 @Test
41 public void testUpdateUser() {
42 String id = "5c31f93f91ffb269a774b860";
43 User user = new User();
44 user.setId(id);
45 user.setName("test2");
46 userDao.updateUser(user);
47 }
48
49 @Test
50 public void testDeleteUserById() {
51 String id = "5c31f93f91ffb269a774b860";
52 userDao.deleteUserById(id);
53 }
54 }

執行單元測試運行正常,回到Robo 3T也發現執行成功。
由此可見對於基本的一些操作,大可不必在Spring中配置一些MongoDB的連接,只需要一句配置提供地址、用戶名、密碼即可,軟件開發在學習特別是在初學的過程,讓一切先跑起來再說。

文章來自:https://www.itjmd.com/news/show-5328.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章