一招让Mongo在Spring中顺畅运行

在这里插入图片描述
本文旨在Spring中如何成功连接MongoDB并对其进行增删改查等操作,由于小编也是刚接触,对其中的一些原由也不甚了解,若有错误之处,敬请指正。
在这里插入图片描述

习惯了MySQL在Spring中整合时填写各种各样的连接参数,本来只想做一件简单的数据库插入查询而已,翻遍整个互联网通篇都是复制粘贴抄袭的配置,连接数的多少,超时时间的多少等等。
  SprintBoot的出现,秉持约定大于配置的目标,可以使你免去许多配置的烦脑,“约定”即是大多数人都这么做,你这么做估计也没问题,反正就是能跑起来,你要用高级特性也可以也支持自定义配置。所以本文采用SpringBoot力求达到零XML配置。
  不得不说,Spring如今已经成为Java EE事实上的标准,可以说Spring出品必属精品,其中与数据库打交道的部分,Spring也替我们做好了封装,本文操作MongoDB的API不需要自己再在mongo-driver的基础上再封装一层,而是直接使用Spring提供的spring-data-mongo模块,这个模块加上SpringBoot的结合,淋漓尽致地展现了什么叫做“约定大于配置”。
  为了便于注入Bean,我们在maven中引入了以下两个包:
org.springframework.boot
spring-boot-starter-data-mongodb


org.springframework.boot
spring-boot-starter-web

  SprintBoot的版本号为2.0.2.RELEASE。
  为了验证是否能对MongoDB进行操作,我们还需要再引入Spring的单元测试包:

org.springframework.boot
spring-boot-starter-test
test

  起初我想着,这应该需要配置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 findUserByName(String name) {
38 Query query = new Query(Criteria.where(“name”).is(name));
39 List 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 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

猜你喜欢

转载自blog.csdn.net/a6984021/article/details/86005625