Spring整合MongoDB

Spring整合MongoDB

1)spring4.0整合mongodb3.4的jar依赖

Pom.xml依赖:

    org.mongodb

    mongo-java-driver

    3.1.0

    org.springframework.data

    spring-data-mongodb

    1.8.0.RELEASE

2)整合代码:application.xml:

命名空间依赖:

xmlns:mongo="http://www.springframework.org/schema/data/mongo"  

http://www.springframework.org/schema/data/mongo

http://www.springframework.org/schema/data/mongo/spring-mongo.xsd

 

 

 

    

      

      

    

    

    

       

      

 

实体类上方:mongoDB识别不了date类型

@Document(collection="user")

public class User implements Serializable{

 

注意:需要JDK1.7的支持

3)示例代码:UserDaoImpl:

根据ID修改:

Query query=new Query(new Criteria("uid").is(user.getUid()));

Update update=new Update();

update.set("password", user.getPassword());

mongoTemplate.updateFirst(query, update, User.class);

分页查询:

Query query=new Query().skip(skip).limit(limit);

return mongoTemplate.find(query, User.class);

保存:

mongoTemplate.insert(user);

删除:

Query query=new Query(new Criteria("uid").is(id));

mongoTemplate.remove(query, User.class);

创建集合:

@PostConstruct

public void init(){

if(!mongoTemplate.collectionExists(User.class)){

//如果user集合不存在,创建

mongoTemplate.createCollection(User.class);

}

 

SpringMVC上传文件

1,修改注册页面和修改页面

注册:上传头像:

 

修改:


修改头像:

2,表单添加属性

enctype="multipart/form-data"

3, Spring的配置文件中添加文件解析器

 

       

       

       

4,user控制器添加uploadFile方法和getFile方法

/**

 * 向MongoDB中保存用户头像

 * @param request

 * @param id 用户ID

 */

public void uploadFile(HttpServletRequest request,int id){

//将上下文初始化给 CommonsMultipartResolver (多部分解析器)

CommonsMultipartResolver resolver=

new CommonsMultipartResolver(request.getSession().getServletContext());

 

//检查request中是否包含 multipart数据

if(resolver.isMultipart(request)){

//将request中的数据,转换成multipart类型的数据

MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;

 

//获取所有的文件名,进行迭代

Iterator iterator = multipartRequest.getFileNames();

while(iterator.hasNext()){

//得到上传的文件

MultipartFile file = multipartRequest.getFile(iterator.next());

if(file!=null){

try {

//向MongoDB中保存文件

service.saveFile(file.getInputStream(), id);

} catch (IOException e) {

System.out.println("获取输入流失败:"+e.getMessage());

}

}

}

}

}

 

/**

 * 以内存流的方式显示头像信息

 * @param id 用户的ID

 * @param response

 */

@RequestMapping(value="/user/getFile",method=RequestMethod.GET)

public void getFile(String id,HttpServletResponse response){

GridFSDBFile file = service.getFile(id);

try {

InputStream in = file.getInputStream();

OutputStream out = response.getOutputStream();

 

byte[] buff=new byte[1024];

int len=0;

while((len=in.read(buff))>0){

out.write(buff, 0, len);

}

out.flush();

} catch (Exception e) {

System.out.println("获取图片错误:"+e.getMessage());

}

}

5,MongoDAO实现 增、删、查 操作

@Override

public GridFSInputFile saveFile(InputStream in, Object id) {

GridFS fs=new GridFS(mongoTemplate.getDb());

GridFSInputFile gridInput = fs.createFile(in);

//添加文件的标识filename

gridInput.put("filename", Constants.USER_PHOTO+id);

//保存文件

gridInput.save();

return gridInput;

}

@Override

public GridFSDBFile getFile(Object id) {

GridFS fs=new GridFS(mongoTemplate.getDb());

GridFSDBFile gridFSDBFile=null;

try {

//根据filename获取

gridFSDBFile = fs.findOne(Constants.USER_PHOTO+id);

} catch (Exception e) {

System.out.println("获取失败:"+e.getMessage());

}

return gridFSDBFile;

}

@Override

public void deleteFile(Object id) {

try {

GridFS fs=new GridFS(mongoTemplate.getDb());

//根据filename去删除

fs.remove(Constants.USER_PHOTO+id);

} catch (Exception e) {

System.out.println("该文件不存在,删除失败!");

}

}

6,管理员显示所有用户页面,实现头像展示

实现MongoDB图片保存

 

如何将一个字节流转换为图片文件显示到页面上

写一个servlet(假设名字是servletImg),页面的参数就是 id,然后将从DB得到的图像的byte[],通过流输出给页面。页面还是

 

一般情况下,你可以用关系型数据库的思维去理解它。保存文件的路径。
但是在你考虑使用MongoDB的时候说明你的系统的数据量已经达到了一个层级了。也就是说推荐使用分布式的文件存储系统。

 

mongodb操作文件,主要是通过GridFS类。存储文件主要存放在fs中,其中的fs是数据库默认的。并且GridFS是直接与数据库打交道,与collection集合无关。

由于MongoDB的文档结构为BJSON格式(BJSON全称:Binary JSON),而BJSON格式本身就支持保存二进制格式的数据,因此可以把文件的二进制格式的数据直接保存到MongoDB的文档结构中。

 

 

你可能感兴趣的:(数据库-MongoDB)