让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:
package com.mongo.domain; import lombok.Data;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field; import java.io.Serializable; /**
* @author OKevin
* @description: MongoDB实体映射类
* @date 2019-01-06 12:10
*/
@Data
@ToString
//以上两个注解使用的是lombok,可减少代码中getter/setter代码
@Document(collection = "user")
public class User implements Serializable { private static final long serialVersionUID = 5094995541812833015L;
/**
* 主键使用此注解
*/
@Id
private String id; /**
* 字段使用此注解
*/
@Field
private String name;
}
package com.mongo.dao; import com.mongo.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component; import java.util.List; /**
* @author OKevin
* @description: 数据层操作类
* @date 2019-01-06 19:52
*/
@Component
public class UserDao { @Autowired
private MongoTemplate mongoTemplate; /**
* 保存用户
* @param user 返回保存的用户
*/
public void saveUser(User user) {
mongoTemplate.save(user);
} /**
* 根据名字查询用户
* @param name 名字
* @return 用户
*/
public List<User> findUserByName(String name) {
Query query = new Query(Criteria.where("name").is(name));
List<User> users = mongoTemplate.find(query, User.class);
return users;
} /**
* 更新用户
* @param user 待更新的用户
*/
public void updateUser(User user) {
Query query = new Query(Criteria.where("id").is(user.getId()));
Update update = new Update().set("name", user.getName());
mongoTemplate.updateFirst(query, update, User.class);
} /**
* 根据MongoDB的_id删除用户
* @param Id _id
*/
public void deleteUserById(String Id) {
Query query = new Query(Criteria.where("id").is(Id));
mongoTemplate.remove(query, User.class);
}
}
package com.mongo; import com.mongo.dao.UserDao;
import com.mongo.domain.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import java.util.List; @RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDataMongoDemoApplicationTests { @Autowired
private UserDao userDao; @Test
public void contextLoads() {
} @Test
public void testSaveUser() {
User user = new User();
user.setName("test");
userDao.saveUser(user);
} @Test
public void testFindUserByName() {
String name = "test";
List<User> users = userDao.findUserByName(name);
System.out.println(users);
} @Test
public void testUpdateUser() {
String id = "5c31f93f91ffb269a774b860";
User user = new User();
user.setId(id);
user.setName("test2");
userDao.updateUser(user);
} @Test
public void testDeleteUserById() {
String id = "5c31f93f91ffb269a774b860";
userDao.deleteUserById(id);
}
}
由此可见对于基本的一些操作,大可不必在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中跑起来的更多相关文章
- spring中使用mockito
1 mockito介绍和入门 官方:https://github.com/mockito/mockito 入门: 5分钟了解Mockito http://liuzhijun.iteye.com/blo ...
- Spring中给Bean注入集合
Spring中如果一个Bean里含有集合元素,需要给Bean里的集合元素注入元素时,可以采用如下方法,一个是构造器注入,一个是setter注入 JavaBean源代码: import java.uti ...
- 使用Spring中的PropertyPlaceholderConfigurer读取文件
目录 一. 简介 二. XML 方式 三. Java 编码方式 一. 简介 大型项目中,我们往往会对我们的系统的配置信息进行统一管理,一般做法是将配置信息配置与一个cfg.properties 的文件 ...
- Spring中重要的注解
现在大部分的Spring项目都会用到注解.使用注解来替换xml,一行简单的注解就可以解决很多事情.但是你真的懂其中的原理吗. 本文翻译于 https://docs.spring.io/spring-f ...
- 一文教会你如何在 Spring 中进行集成测试,太赞了
不得不说,测试真的是太重要了!但并不是所有的开发者都这样认为,这种感觉在我回到洛阳后尤其强烈.竟然有团队成员不经测试就把代码提交到代码库,并且是会报错的那种,我天呐,遇到这种队友我也是醉了. 我之前是 ...
- 简说Spring中的资源加载
声明: 本文若有 任何纰漏.错误,请不吝指正!谢谢! 问题描述 遇到一个关于资源加载的问题,因此简单的记录一下,对Spring资源加载也做一个记录. 问题起因是使用了@PropertySource来进 ...
- 一起来踩踩 Spring 中这个循环依赖的坑
1. 前言 2. 典型场景 3. 什么是依赖 4. 什么是依赖调解 5. 为什么要依赖注入 6. Spring的依赖注入模型 7. 非典型问题 参考资料 1. 前言 这两天工作遇到了一个挺有意思的Sp ...
- Velocity初探小结--Velocity在spring中的配置和使用
最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...
- Spring中Bean的作用域、生命周期
Bean的作用域.生命周期 Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).protot ...
随机推荐
- web全套资料 干货满满 各种文章详解
sql注入l MySqlMySQL False注入及技巧总结MySQL 注入攻击与防御sql注入学习总结SQL注入防御与绕过的几种姿势MySQL偏门技巧mysql注入可报错时爆表名.字段名.库名高级S ...
- BUAA_OO Summary——多项式求导问题
从C.DS.计组一路折磨过来, 几乎都在采用过程化.函数式的编程思想.初接触面向对象的项目开发,经过了三周的对多项式求导问题的迭代开发,经历了设计.coding.测评环节,算是对面向对象有了一定的认识 ...
- java从pdf中提取文本
一(单文件转换):下载pdfbox包,百度搜pdfbox.(fontbox-1.8.16.jar和pdfbox-app-1.8.16.jar) package pdf; import java.io. ...
- 小程序页面跳转传参参数值为url时参数时 会出现丢失
当参数的值为url的时候, ?号 _ 下划线 等等 都会被 截取掉,看不到, 这样在 另一个页面 options中 截取的url就不完全 let url="http://ba ...
- 解决用友U8删除用户时提示“用户已启用”不能删除的问题
USE UFSystem go DECLARE @cUser_Id NVARCHAR(20) SET @cUser_Id='用户的登录名' DELETE l FROM dbo.UA_TaskLog l ...
- Socket看法
Socket通常也称做”套接字“,用于描述IP地址和端口,废话不多说,它就是网络通信过程中端点的抽象表示. Socket又称"套接字",应用程序通常通过"套接字" ...
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...
- 树的简介及Java实现
一.树的基本知识 树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合.把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的.它具有以下的特点:每个结 ...
- 再谈反向传播(Back Propagation)
此前写过一篇<BP算法基本原理推导----<机器学习>笔记>,但是感觉满纸公式,而且没有讲到BP算法的精妙之处,所以找了一些资料,加上自己的理解,再来谈一下BP.如有什么疏漏或 ...
- [Swift]LeetCode70. 爬楼梯 | Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...