让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 ...
随机推荐
- java发送短信验证码
业务: 手机端点击发送验证码,请求发送到java服务器端,由java调用第三方平台(我们使用的是榛子云短信http://smsow.zhenzikj.com)的短信接口,生成验证码并发送. SDK下载 ...
- .NET 应用架构电子书中文版
<.NET 微服务:容器化 .NET 应用架构指南> 本书主要介绍了基于容器和微服务的应用架构和设计原则,以及基于 .NET Core 和 Docker 容器的应用程序开发实践.为了让大家 ...
- NeuChar 平台使用及开发教程(六):成为开发者
在上一篇<NeuChar 平台使用及开发教程(五):使用 NeuChar 的关键字回复服务>中,我们已经学习了如何命中关键字来反馈特定格式内容的信息,这是由微信开发者/运营者自己来维护的信 ...
- 数据库sql常见优化方法
以前刚开始做项目的时候,开发经验尚浅,每次遇到查询比较慢时,项目经理就会问:是不是又用select * 了?查询条件有没有加索引?一语惊醒梦中人,赶紧检查..果然如此! 有时我们写sql语句时,没有考 ...
- 查看和修改Linux服务器的时区和时间
一.查看和修改Linux的时区1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区方法 A 命令 : "tzselect" 方法 ...
- [Swift]LeetCode22. 括号生成 | Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
- Python—day17时间模块、系统模块、递推遍历、序列化
一.time'''时间戳(timestamp):time.time()延迟线程的运行:time.sleep(secs)(指定时间戳下的)当前时区时间:time.localtime([secs])(指定 ...
- 【Spark篇】---Spark中内存管理和Shuffle参数调优
一.前述 Spark内存管理 Spark执行应用程序时,Spark集群会启动Driver和Executor两种JVM进程,Driver负责创建SparkContext上下文,提交任务,task的分发等 ...
- 【Scala篇】--Scala中Trait、模式匹配、样例类、Actor模型
一.前述 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 模式匹配机制相当于java中的switch-case. 使用了case关键字的类定义就是样例类(case ...
- 甘果移动老甘:移动互联网变迁中的App和小程序
2018 年 10 月13 日,由又拍云和知晓云联合主办的 Open Talk 丨2018 小程序开发者沙龙系列活动广州站拉开帷幕,甘果移动的 CEO 路文杰(老甘)在沙龙上做了<移动互联网变迁 ...