让Mongo在Spring中跑起来_玖富娱乐主管发布


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。本文标题为《让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中引入了以下两个包:
<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的衔接,只须要一句设置装备摆设供应地点、用户名、暗码便可,软件开发在进修特别是在初学的历程,让统统先跑起来再说。

  本文涉及到的完全代码已上传至GitHub:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/让Mongo在Spring中跑起来/spring-data-mongo-demo。

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-

 

 

这是一个能给程序员加buff的民众号 

 

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。