sprinboot之mongodb
一、MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
2)依赖包(pom.xml)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
</dependencies>
3)需要用到的下载配置MongoConfiguration
/**
* file 文件处理配置
*/
@Configuration
public class MongoConfiguration { @Bean
public GridFSBucket gridFSBucket(MongoDbFactory mongoDbFactory) {
//主要是配置GridFSBuckets用于下载
return GridFSBuckets.create(mongoDbFactory.getDb());
}
}
4)实现过程MongoServiceImpl
@Service
@Transactional
public class MongoServiceImpl implements IMongoService { @Autowired
private GridFsTemplate gridFsTemplate; @Autowired
private GridFSBucket gridFSBucket; @Autowired
private MongoTemplate mongoTemplate; /**
* 上传文件
* @param file
* @return
* @throws FileNotFoundException
*/
@Override
public String uploadFile(File file) throws FileNotFoundException {
ObjectId objectId = gridFsTemplate.store(new FileInputStream(file), file.getName());
return objectId.toHexString();
} /**
* 上传文件
* @param inputStream
* @param fileName
* @return
*/
@Override
public String uploadFile(InputStream inputStream, String fileName) {
ObjectId objectId = gridFsTemplate.store(inputStream, fileName);
return objectId.toHexString();
} /**
* 下载文件
* @param mongoId
* @param outputStream
*/
@Override
public void downloadFile(String mongoId, OutputStream outputStream) throws IOException {
// GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(mongoId)));
// GridFsResource gridFsResource = new GridFsResource(gridFSFile);
// IOUtils.copy(gridFsResource.getInputStream(), outputStream);
//上面这种方式也可以实现下载
gridFSBucket.downloadToStream(new ObjectId(mongoId), outputStream);
} /**
* 删除文件
* @param mongoId
*/
@Override
public void deleteFile(String mongoId) {
gridFsTemplate.delete(Query.query(Criteria.where("_id").is(mongoId)));
} /**
* 保存对象
* @param t
* @param <T>
*/
@Override
public <T> void save(T t) {
mongoTemplate.save(t);
} /**
* 查询对象
* @param query
* @param clazz
* @param <T>
* @return
*/
@Override
public <T> List<T> find(Query query, Class<T> clazz) {
return mongoTemplate.find(query, clazz);
} /**
* 查询单个对象
* @param query
* @param clazz
* @param <T>
* @return
*/
@Override
public <T> T findOne(Query query, Class<T> clazz) {
return mongoTemplate.findOne(query, clazz);
} /**
* 删除对象
* @param query
* @param clazz
* @param <T>
*/
@Override
public <T> void delete(Query query, Class<T> clazz) {
mongoTemplate.findAndRemove(query, clazz);
} }
说明:这里包含了两个部分,一个是文件,一个是对象的处理
5)测试
a、文件测试FileController
@RestController
@RequestMapping(value = "/file")
public class FileController { private Logger logger = LoggerFactory.getLogger(FileController.class); @Autowired
private IMongoService mongoService; @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public ResultInfo uploadFile(MultipartFile multipartFile) {
ResultInfo resultInfo = new ResultInfo();
try {
resultInfo.setData(mongoService.uploadFile(multipartFile.getInputStream(), multipartFile.getOriginalFilename()));
} catch (Exception e) {
logger.error("upload file error:", e);
resultInfo.setStatus(false);
resultInfo.setFailCode(e.getMessage());
}
return resultInfo;
} @RequestMapping(value = "/downloadFile", method = RequestMethod.POST)
public ResultInfo downloadFile(@RequestBody Map<String, Object> map, HttpServletResponse response) {
ResultInfo resultInfo = new ResultInfo();
try {
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=test.mp3");
mongoService.downloadFile(map.get("mongoId").toString(), response.getOutputStream());
} catch (Exception e) {
logger.error("download file error:", e);
resultInfo.setStatus(false);
resultInfo.setFailCode(e.getMessage());
}
return resultInfo;
} @RequestMapping(value = "/deleteFile", method = RequestMethod.POST)
public ResultInfo deleteFile(@RequestBody Map<String, Object> map) {
ResultInfo resultInfo = new ResultInfo();
try {
mongoService.deleteFile(map.get("mongoId").toString());
} catch (Exception e) {
logger.error("delete file error:", e);
resultInfo.setStatus(false);
resultInfo.setFailCode(e.getMessage());
}
return resultInfo;
}
}
b、对象测试
/**
* 对象存储,测试
*/
@Component
public class MongoTask implements CommandLineRunner { @Autowired
private IMongoService mongoService; @Override
public void run(String... args) throws Exception {
mongoService.save(new User(1L, "test1", 25));
mongoService.save(new User(2L, "test2", 25));
System.out.println(mongoService.find(Query.query(Criteria.where("name").regex("test")), User.class));
System.out.println(mongoService.findOne(Query.query(Criteria.where("name").is("test2")), User.class));
mongoService.delete(Query.query(Criteria.where("name").is("test2")), User.class);
}
}


sprinboot之mongodb的更多相关文章
- springboot 集成mongodb
环境依赖 在pom文件引入spring-boot-starter-data-mongodb依赖: <dependency> <groupId>org.springframewo ...
- SpringBoot非官方教程 | 第八篇:springboot整合mongodb
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot8-mongodb/ 本文出自方志朋的博客 这篇文 ...
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- MongoDB系列(二):C#应用
前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...
随机推荐
- unbind() 移除事件内处理方法
实例: 移除所有 p 元素的事件处理器: $("button").click(function(){ $("p").unbind(); }); 定义和用法: u ...
- 用字典给Model赋值并支持map键值替换
用字典给Model赋值并支持map键值替换 这个是昨天教程的升级版本,支持键值的map替换. 源码如下: NSObject+Properties.h 与 NSObject+Properties.m / ...
- @private、@protected与@public三者之间的区别
@private.@protected与@public三者之间的区别 类之间关系图 @private只能够使用在声明的类当中,其子类也不能够使用用@private声明的实例变量 @protected只 ...
- Linux 环境部署记录(三) - Jenkins安装与配置
Jenkins安装 为了兼容生产环境的jdk1.7版本,从官网得知,Jenkins必须是1.6之前的版本,因此下载jenkins-1.596.3-1.1.noarch.rpm到本地进行安装: #移动到 ...
- java+redis+lua生成自动增长的ID序列号
1.编写lua脚本用于生成主键ID序列号,内容如下 local key = tostring(KEYS[1]); local count = tonumber(KEYS[2]); local date ...
- ZT C语言链表操作(新增单向链表的逆序建立)
这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...
- PHP设计模式系列 - 装饰器
什么是装饰器 装饰器模式,对已有对象的部分内容或者功能进行调整,但是不需要修改原始对象结构,可以使用装饰器设 应用场景 设计一个UserInfo类,里面有UserInfo数组,用于存储用户名信息 通过 ...
- php 实现八皇后问题
php实现的八皇后问题,可以推广到N皇后 <?php class Empress{ private $queen;//存储位置,例如$queen[2] = 3表示第三行的第四列位置,行列从0计数 ...
- jQuery鼠标悬停
(function ($) { $.fn.hoverdir = function(options){ var options = $.extend({ choice : ".cove&quo ...
- Windows启动控制台登录模式
效果如下: 实现代码: Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Lo ...