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进行通讯.再次强调一下,我使用 ...
随机推荐
- Flask配置文件和 路由系统
debug = True开启debug模式 当你的代码在界面增减之后不用刷新界面自动更新 app.logger.error("这是error模式") app.logger.info ...
- swift版的CircleView
swift版的CircleView 效果图 源码 // // CircleView.swift // CircleView // // Created by YouXianMing on 15/10/ ...
- 基于NSString处理文件的高级类
基于NSString处理文件的高级类 我已经把处理文件的类简化到了变态的程度,如果你还有更简洁的方法,请告知我,谢谢! 使用详情: 源码: // // NSString+File.h // Maste ...
- Windows平台使用Gitblit搭建Git服务器教程
Windows平台使用Gitblit搭建Git服务器图文教程 Git服务现在独树一帜,相比与SVN有更多的灵活性,最流行的开源项目托管网站Github上面,如果托管开源项目,那么就是免费使用的,但是闭 ...
- mysql 注入基础知识
(1)注入的分类---仁者见仁,智者见智. 下面这个是阿德玛表哥的一段话,个人认为分类已经是够全面了.理解不了跳过,当你完全看完整个学习过程后再回头看这段.能完全理解下面的这些每个分类,对每个分类有属 ...
- rz -be 上传文件解压失败
在把Windows上的文件传至Linux端时用到SecureCRT,一般小文件都没有问题,文件太大时则出现了上传后的文件只有几K大小,当然大于2个G的是不可能传的上去的了.对于几百M到1G多的大文件要 ...
- DA-GAN技术【简介】【机器通过文字描述创造图像】
[题外话:今天上课我做了一个关于DA-GAN技术的ppt演讲,写一点东西留念一下...] 转载请注明出处:https://www.cnblogs.com/GraceSkyer/p/9107471.ht ...
- java.sql.SQLException: Incorrect string value: '\xE5\xB0‘
mysql插入中文字符报java.sql.SQLException: Incorrect string value: '\xE5\xB0‘ #原因:由于默认情况下,mysql的字符集是latin1(I ...
- P3558 [POI2013]BAJ-Bytecomputer
题目描述 A sequence of integers is given. The bytecomputer is a device that allows the following operati ...
- 2018 - 2019 CTU Open Contest H. Split Game 【SG函数】
H. Split Game time limit per test 1.0 s memory limit per test 256 MB input standard input output sta ...