1,添加依赖包
<!-- mongodb -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2,添加连接配置
spring:
data:
mongodb:
uri: mongodb://username:password@127.0.0.1:27017/admin
username:填写用户名
password:填写密码
3,测试
3.1,新建实体类:UserEntity
public class UserEntity {
private String id;
private Integer age;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "UserEntity [id=" + id + ", age=" + age + ", name=" + name + "]";
}
}
3.2,新建service:MongoDBService,连接mongodb,数据操作。
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.Service;
import com.xx.xx.model.UserEntity;
@Service
public class MongoDBService {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 创建对象
*/
public void saveOne(UserEntity one) {
mongoTemplate.save(one);
}
/**
* 根据用户名查询对象
* @return
*/
public UserEntity findByName(String name) {
Query query=new Query(Criteria.where("name").is(name));
UserEntity mgt = mongoTemplate.findOne(query , UserEntity.class);
return mgt;
}
/**
* 更新对象
*/
public void updateFirst(UserEntity one) {
Query query=new Query(Criteria.where("id").is(one.getId()));
Update update= new Update().set("age", one.getAge()).set("name", one.getName());
//更新查询返回结果集的第一条
mongoTemplate.updateFirst(query,update,UserEntity.class);
//更新查询返回结果集的所有
// mongoTemplate.updateMulti(query,update,TestEntity.class);
}
/**
* 更新对象
*/
public void updateAll(UserEntity one) {
Query query=new Query(Criteria.where("id").is(one.getId()));
Update update= new Update().set("age", one.getAge()).set("name", one.getName());
//更新查询返回结果集的所有
mongoTemplate.updateMulti(query,update,UserEntity.class);
}
/**
* 删除对象
* @param id
*/
public void deleteTestById(Integer id) {
Query query=new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query,UserEntity.class);
}
}
3.3,测试类:MongoDBTest
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.test.context.junit4.SpringJUnit4ClassRunner;
import com.xx.xx.Application;
import com.xx.xx.model.UserEntity;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class MongoDBTest {
@Autowired
private MongoDBService mongoDBService;
@Test
public void save() {
UserEntity user = new UserEntity();
user.setAge(20);
user.setName("莉莉");
mongoDBService.saveOne(user);
}
@Test
public void update() {
UserEntity user = new UserEntity();
user.setId("5be9616f21f8b262b8fe7ca8");
user.setName("小黑");
user.setAge(30);
mongoDBService.updateFirst(user);
}
@Test
public void findTest() {
UserEntity user = mongoDBService.findByName("莉莉");
System.out.println(user);
}
}
4,使用连接工具,连接mongodb,观察数据变化。这里使用的是NoSQLBooster for MongoDB,可以到CSDN资源库下载。
5,使用GridFsTemplate实现文件的存储和下载。
在MongoDBService中添加方法:
/**
* 上传文件
* @param ins
* @param fileName
* @param contentType
* @return
*/
public Object uploadFile(InputStream ins, String fileName, String contentType) {
// 将文件存储到mongodb中,mongodb 将会返回这个文件的具体信息
GridFSFile gridFSFile = gridFsTemplate.store(ins, fileName, contentType);
return gridFSFile.toString();
}
/**
* 下载文件
* @param fileId
* @param request
* @param response
* @throws IOException
*/
public void downloadFile(String fileId, HttpServletRequest request, HttpServletResponse response) throws IOException {
Query query = Query.query(Criteria.where("_id").is(fileId));
// 查询单个文件
GridFSDBFile gfsfile = gridFsTemplate.findOne(query);
if (gfsfile == null) {
return;
}
String fileName = gfsfile.getFilename().replace(",", "");
//处理中文文件名乱码
if (request.getHeader("User-Agent").toUpperCase().contains("MSIE") ||
request.getHeader("User-Agent").toUpperCase().contains("TRIDENT")
|| request.getHeader("User-Agent").toUpperCase().contains("EDGE")) {
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
} else {
//非IE浏览器的处理:
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
}
// 通知浏览器进行文件下载
response.setContentType(gfsfile.getContentType());
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
gfsfile.writeTo(response.getOutputStream());
}
/**
* 删除文件
* @param fileId
* @return
*/
public Object deleteFile(String fileId) {
Query query = Query.query(Criteria.where("_id").is(fileId));
// 查询单个文件
GridFSDBFile gfsfile = gridFsTemplate.findOne(query);
if (gfsfile == null) {
return "文件不存在";
}
gridFsTemplate.delete(query);
return "success";
}
添加测试MongoDBController:
import java.io.InputStream;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.xx.xx.service.MongoDBService;
@Controller
@RequestMapping("/test")
public class MongoDBController {
@Resource
private MongoDBService mongoDBService;
/**
* 文件上传
*
* @param request
* @return
*/
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
@ResponseBody
public Object uploadFile(HttpServletRequest request) throws Exception {
Part part = request.getPart("file");
// 获得提交的文件名
String fileName = part.getSubmittedFileName();
// 获得文件输入流
InputStream ins = part.getInputStream();
// 获得文件类型
String contentType = part.getContentType();
return mongoDBService.uploadFile(ins, fileName, contentType);
}
/**
* 下载
*
* @param fileId 文件id
* @param response
* @return
*/
@RequestMapping(value = "/downloadFile")
public void downloadFile(@RequestParam(name = "fileId") String fileId, HttpServletRequest request, HttpServletResponse response) throws Exception {
mongoDBService.downloadFile(fileId,request,response);
}
/**
* 删除文件
*
* @param fileId
* @return
*/
@RequestMapping(value = "/deleteFile", method = RequestMethod.POST)
@ResponseBody
public Object deleteFile(@RequestParam(name = "fileId") String fileId) {
return mongoDBService.deleteFile(fileId);
}
}
添加测试页面:
<body>
<div>
<form method="POST" enctype="multipart/form-data" action="/test/uploadFile">
<p>选择文件上传:<input type="file" name="file" /></p>
<input type="submit" value="上传" />
</form>
<br>
<form method="POST" action="/test/downloadFile">
<p>输入文件ID:<input type="text" name="fileId" /></p>
<input type="submit" value="下载" />
</form>
<br>
<form method="POST" action="/test/deleteFile">
<p>输入文件ID:<input type="text" name="fileId" /></p>
<input type="submit" value="删除" />
</form>
</div>
</body>
启动项目测试:
可以看到文件成功上传,返回已存储的文件信息,接下来使用命令查看mongodb数据:db.fs.files.find()。结果如下: