欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

让Mongo在Spring中跑起来

程序员文章站 2022-05-05 14:07:48
本文标题为《让Mongo在Spring中跑起来》,旨在Spring中如何成功连接MongoDB并对其进行增删改查等操作,由于笔者也是刚接触,对其中的一些原由也不甚了解,若有错误之处,敬请指正。 习惯了MySQL在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/%e8%ae%a9mongo%e5%9c%a8spring%e4%b8%ad%e8%b7%91%e8%b5%b7%e6%9d%a5/spring-data-mongo-demo

 

 

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

让Mongo在Spring中跑起来