让Mongo在Spring中跑起来
习惯了mysql在spring中整合时填写各种各样的连接参数,本来只想做一件简单的数据库插入查询而已,翻遍整个互联网通篇都是复制粘贴抄袭的配置,连接数的多少,超时时间的多少等等。
<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>
<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连接。
spring.data.mongodb.uri=mongodb://okevin:123456@localhost:27017/recommended
我们先通过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 }
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 }
由此可见对于基本的一些操作,大可不必在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的公众号
上一篇: Socket网络通信之BIO
下一篇: Java代码生成器CodeX4J介绍
推荐阅读