SpringBoot结合MongoDB入门
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它可以存储多种数据结构,类似json的bson,可以存储复杂数据类型。
它最大的特点就是支持的查询语言非常强大,其语法类似面向对象的方式,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
在传统关系型数据库一般由:数据库(database),表(table),数据记录(record)三个概念层次组成,而MongoDB是由 数据库(database),集合(collection),文档对象(document)三个层级组成。
MongoDB中集合对应了关系型数据库中的表,但是集合中没有列、行、约束关系的概念,体现了它模式自由的特点,存储数据结构的自由。MongDB中存储的一条记录就是一个文档,是一个数据结构(类似ElasticSearch),
由字段和值组成。MongoDB文档与JSON对象类似。字段的值有可能包括其它文档、数组以及文档数组。
MongoDB适合对大量或者无固定格式的数据进行存储,比如:日志、缓存、文本数据等,对事务的支持比较弱,不适合多文档(多表)级联查询。
下面介绍一下MongoDB的增删改查:
Spring Boot对各种流行的数据源都进行了封装,当然也包括了mongodb,下面给大家介绍如何在spring boot中使用mongodb:
1、pom包配置
引入spring-boot-starter-data-mongodb包
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
2、在application.properties中添加配置
spring.data.mongodb.uri=mongodb://user:pass@localhost:27017/test
若是本地连接:spring.data.mongodb.uri=mongodb://localhost:27017/test
多个IP集群可以采用以下配置:
spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database
2、创建数据实体
public class UserEntity implements Serializable {
private static final long serialVersionUID = -3258839839160856613L;
private Long id;
private String userName;
private String passWord;
//getter、setter省略
}
3、创建实体dao的增删改查操作
dao层实现了UserEntity对象的增删改查
@Component
public class UserDaoImpl implements UserDao { @Autowired
private MongoTemplate mongoTemplate; /**
* 创建对象
* @param user
*/
@Override
public void saveUser(UserEntity user) {
mongoTemplate.save(user);
} /**
* 根据用户名查询对象
* @param userName
* @return
*/
@Override
public UserEntity findUserByUserName(String userName) {
Query query=new Query(Criteria.where("userName").is(userName));
UserEntity user = mongoTemplate.findOne(query , UserEntity.class);
return user;
} /**
* 更新对象
* @param user
*/
@Override
public void updateUser(UserEntity user) {
Query query=new Query(Criteria.where("id").is(user.getId()));
Update update= new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());
//更新查询返回结果集的第一条
mongoTemplate.updateFirst(query,update,UserEntity.class);
//更新查询返回结果集的所有
// mongoTemplate.updateMulti(query,update,UserEntity.class);
} /**
* 删除对象
* @param id
*/
@Override
public void deleteUserById(Long id) {
Query query=new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query,UserEntity.class);
}
}
4、对应的测试方法
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserDaoTest { @Autowired
private UserDao userDao; @Test
public void testSaveUser() throws Exception {
UserEntity user=new UserEntity();
user.setId(2l);
user.setUserName("小明");
user.setPassWord("fffooo123");
userDao.saveUser(user);
} @Test
public void findUserByUserName(){
UserEntity user= userDao.findUserByUserName("小明");
System.out.println("user is "+user);
} @Test
public void updateUser(){
UserEntity user=new UserEntity();
user.setId(2l);
user.setUserName("天空");
user.setPassWord("fffxxxx");
userDao.updateUser(user);
} @Test
public void deleteUserById(){
userDao.deleteUserById(1l);
} }
5、查验结果
可以使用工具mongoVUE工具来连接后直接图形化展示查看,也可以登录服务器用命令来查看
1.登录mongos
bin/mongo -host localhost -port 20000
2、切换到test库
use test
3、查询userEntity集合数据
db.userEntity.find()
根据3查询的结果来观察测试用例的执行是否正确。
到此springboot对应mongodb的增删改查功能已经全部实现。
多数据源mongodb的使用
在多mongodb数据源的情况下,我们换种更优雅的方式来实现
1、pom包配置
添加lombok和spring-boot-autoconfigure包引用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>RELEASE</version>
</dependency>
Lombok - 是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。简单试了以下这个工具还挺好玩的,加上注解我们就不用手动写 getter\setter、构建方式类似的代码了。
spring-boot-autoconfigure - 就是spring boot的自动化配置
2、配置文件使用YAML的形式添加两条数据源,如下:
mongodb:
primary:
host: 192.168.9.60
port: 20000
database: test
secondary:
host: 192.168.9.60
port: 20000
database: test1
3、配置两个库的数据源
封装读取以mongodb开头的两个配置文件
@Data
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties { private MongoProperties primary = new MongoProperties();
private MongoProperties secondary = new MongoProperties();
}
配置不同包路径下使用不同的数据源
第一个库的封装
@Configuration
@EnableMongoRepositories(basePackages = "com.neo.model.repository.primary",
mongoTemplateRef = PrimaryMongoConfig.MONGO_TEMPLATE)
public class PrimaryMongoConfig { protected static final String MONGO_TEMPLATE = "primaryMongoTemplate";
}
第二个库的封装
@Configuration
@EnableMongoRepositories(basePackages = "com.neo.model.repository.secondary",
mongoTemplateRef = SecondaryMongoConfig.MONGO_TEMPLATE)
public class SecondaryMongoConfig { protected static final String MONGO_TEMPLATE = "secondaryMongoTemplate";
}
读取对应的配置信息并且构造对应的MongoTemplate
@Configuration
public class MultipleMongoConfig { @Autowired
private MultipleMongoProperties mongoProperties; @Primary
@Bean(name = PrimaryMongoConfig.MONGO_TEMPLATE)
public MongoTemplate primaryMongoTemplate() throws Exception {
return new MongoTemplate(primaryFactory(this.mongoProperties.getPrimary()));
} @Bean
@Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
public MongoTemplate secondaryMongoTemplate() throws Exception {
return new MongoTemplate(secondaryFactory(this.mongoProperties.getSecondary()));
} @Bean
@Primary
public MongoDbFactory primaryFactory(MongoProperties mongo) throws Exception {
return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
mongo.getDatabase());
} @Bean
public MongoDbFactory secondaryFactory(MongoProperties mongo) throws Exception {
return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
mongo.getDatabase());
}
}
至此,两个库的配置信息已经完成。
4、创建两个库分别对应的对象和Repository
借助lombok来构建对象
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "first_mongo")
public class PrimaryMongoObject { @Id
private String id; private String value; @Override
public String toString() {
return "PrimaryMongoObject{" + "id='" + id + '\'' + ", value='" + value + '\''
+ '}';
}
}
对应的Repository
public interface PrimaryRepository extends MongoRepository<PrimaryMongoObject, String> {
}
继承了 MongoRepository 会默认实现很多基本的增删改查,省了很多自己写dao层的代码
5、最后测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MuliDatabaseTest { @Autowired
private PrimaryRepository primaryRepository; @Autowired
private SecondaryRepository secondaryRepository; @Test
public void TestSave() { System.out.println("************************************************************");
System.out.println("测试开始");
System.out.println("************************************************************"); this.primaryRepository
.save(new PrimaryMongoObject(null, "第一个库的对象")); this.secondaryRepository
.save(new SecondaryMongoObject(null, "第二个库的对象")); List<PrimaryMongoObject> primaries = this.primaryRepository.findAll();
for (PrimaryMongoObject primary : primaries) {
System.out.println(primary.toString());
} List<SecondaryMongoObject> secondaries = this.secondaryRepository.findAll(); for (SecondaryMongoObject secondary : secondaries) {
System.out.println(secondary.toString());
} System.out.println("************************************************************");
System.out.println("测试完成");
System.out.println("************************************************************");
} }
码云地址:https://gitee.com/ityouknow/spring-boot-examples
本文转载自:http://www.ityouknow.com/
SpringBoot结合MongoDB入门的更多相关文章
- SpringBoot+SpringData 整合入门
SpringData概述 SpringData :Spring的一个子项目.用于简化数据库访问,支持NoSQL和关系数据存储.其主要目标是使用数据库的访问变得方便快捷. SpringData 项目所支 ...
- 非关系型数据库MongoDB入门
本文分为以下四块简单介绍非关系型数据库MongoDB:1.MongoDB简介.2.MongoDB和关系数据库对比.3.MongoDB基本概念.4.mongo shell的使用以及对MongoDB的增删 ...
- MongoDB 入门之基础 DCL
此文章主要记录部分主要的 MongoDB 的 DCL 操作. MongoDB 默认不需要用户名和密码就可以用 mongodb.exe 登录 一.开启 MonogoDB 的权限模式 修改 MongoDB ...
- MongoDB入门三:MongoDB shell
MongoDB shell MongDB shell是一个功能完备的Javascript解释器,可以运行Javascript程序.也可以用于连接MongoDB服务器,执行脚本,对数据库进行操作.类似于 ...
- MongoDB 入门之查询(find)
MongoDB 入门之查询(find) 1. find 简介 (1)find的第一个参数决定了要返回哪些文档. 空的查询文档会匹配集合的全部内容.默认就是{}.结果将批量返回集合c中的所有文档. db ...
- MongoDB入门简介
MongoDB入门简介 http://blog.csdn.net/lolinzhang/article/details/4353699 有关于MongoDB的资料现在较少,且大多为英文网站,以上内容大 ...
- mongodb入门教程二
title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...
- mongodb入门教程
title: mongodb入门教程 date: 2016-04-06 14:47:18 tags: --- 为什么要认识呢,因为这玩意就一傻逼 借用一下百科的介绍 MongoDB 是一个介于关系数据 ...
- MongoDb 入门教程
MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的高性能数据存储解决方案,经常被用于非关系型数据的存储,能存储海量的数据. 常 ...
随机推荐
- maven 安装jar包
1 下载maven: 下载路径: http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-b ...
- 关于 Error: No PostCSS Config found in 的错误
问题描述: 项目在本地运行不报错,上传到 GitHub 之后,再 clone 到本地, npm install 安装完成之后再执行 npm run dev 这时报错 Error: No PostCSS ...
- filezilla server配置为 passive mode
首先要配置filezilla的setting里面的Passive mode setting选项 (2)关键部分,打开win8.1下的防火墙,新建入站规则 注意,要打开80,443端口.已经passiv ...
- 怎样选择正确的HTTP状态码
本文来源于我在InfoQ中文站翻译的文章.原文地址是:http://www.infoq.com/cn/news/2015/12/how-to-choose-http-status-code 众所周知. ...
- HDU1232 畅通project 并查集
这道题跟HDU 1213 How Many Tables 并查集很接近,都是赤裸裸的并查集的题. 思路:如果还须要建n-1条路.每并一次就自减1. 參考代码: #include<stdio.h& ...
- OneNote
OneNote导致生成OneNote Table Of Contents.onetoc2 https://answers.microsoft.com/en-us/msoffice/forum/all/ ...
- LeetCode SQL
SQL查询练习一(From LeetCode) 1 select name,population,area 2 from World 3 where area > 3000000 or popu ...
- vs2015发布项目到虚拟主机组策略阻止csc.exe程序问题
这个问题之前碰到过一次,这次又碰到,就记录一下解决方法. 这个问题的产生的原因,据说是虚拟主机没有权限执行exe文件造成的,如果是独立服务器的话发布就不会出现这个问题. 使用VS2015发布web项目 ...
- 将ubuntu安装在用剩下的硬盘改装成的移动硬盘时遇到的问题及解决办法
安装时分完盘后提示:“分配到/的分区开始于3584字节,使用磁盘的最小对齐,这可能造成非常差的性能..." 解决办法: 回到windows使用分区助手等工具先分好盘而不是在安装时分盘(这样分 ...
- 网络流Dinic算法模板 POJ1273
这就是以后我的板子啦~~~ #include <queue> #include <cstdio> #include <cstring> #include <a ...