mongodb学习笔记二
来源:互联网 发布:java怎么写游戏 编辑:程序博客网 时间:2024/05/18 03:38
1、Springboot与MongoDB集成
我们走在Springboot的helloworld基础上,加上MongoDB的引用。首先我们要知道MongoDB的数据库连接地址书写格式为:
mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]
可以看到,这里是支持多机器集群使用的,我们这里使用的是本地环境为:
mongodb://localhost:27017/test
2、集成步骤
2.1 在pom文件中加入MongoDB的Springboot依赖:
<!--引入MongoDB依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
2.2 修改application.yml配置文件如下:
spring: application: #应用名称 name: helloworld data: mongodb: uri: mongodb://localhost:27017/test
2.3 创建测试文件 MongoDBController
package com.nmm.study.controller;import com.mongodb.BasicDBObject;import com.mongodb.DBObject;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;/** * @description 测试 * @date 2017/11/26 * @author Niemingming */@Controller@RequestMapping("/mongo")public class MongoDBController { /** * @description MongoDB的数据库操作工具类 * @date 2017/11/26 * @author Niemingming */ @Autowired private MongoTemplate mongoTemplate; /** * @description 插入操作 * 我们创建一个mongotest集合并插入name和age两个field * @date 2017/11/26 * @author Niemingming */ @ResponseBody @RequestMapping("/insert/{name}/{age}/{id}") public String insert(@PathVariable String name,@PathVariable int age,@PathVariable String id){ //构建数据对象 DBObject data = new BasicDBObject("name",name); data.put("age",age); data.put("_id",id); //改行代码,如果没有集合mongotest,会自动创建一个,然后插入数据,为了方便修改,我们将id设置为前台录入。 mongoTemplate.insert(data,"mongotest"); return "success"; } /** * @description 修改,根据id修改内容 * @date 2017/11/26 * @author Niemingming */ @ResponseBody @RequestMapping("/update/{id}/{name}/{age}") public String update(@PathVariable String id,@PathVariable String name ,@PathVariable int age){ //构建查询条件 DBObject query = new BasicDBObject("_id",id); //构建修改对象 DBObject data = new BasicDBObject("name",name); data.put("age",age); //这里获取集合执行更新操作,要特别说明的是第三个参数,表示是是否执行upsert操作,如果为true,表示会在更新时 //检查是否由记录,如果没有执行插入操作,否则执行更新操作。如果为false,则只做更新操作。 mongoTemplate.getCollection("mongotest").update(query,data,true,false); return "success"; } /** * @description 执行删除操作。 * @date 2017/11/26 * @author Niemingming */ @ResponseBody @RequestMapping("/remove/{id}") public String remove(@PathVariable String id ){ DBObject query = new BasicDBObject("_id",id); mongoTemplate.getCollection("mongotest").remove(query); return "success"; } /** * @description 查询所有记录 * @date 2017/11/26 * @author Niemingming */ @ResponseBody @RequestMapping("/findAll") public String findAll(){ //返回所有的查询记录 return mongoTemplate.getCollection("mongotest").find().toArray().toString(); }}
2.4测试
编写完成,我们启动服务,在浏览器中首先输入:
这里我们设置了端口为8888http://localhost:8888/mongo/insert/lisi/22/1可以看到返回success
我们执行查询操作查看:
http://localhost:8888/mongo/findAll返回[{ "_id" : "1" , "_class" : "com.mongodb.BasicDBObject" , "name" : "lisi" , "age" : 22}]
可以看到,数据已经插入进去了。这里会看到多了个_class字段,这个字段是mongodb的java版加进去的,如果不想要,我们下面会介绍如何去掉该字段。
执行修改操作:
http://localhost:8888/mongo/update/1/wangwu/32返回:success查询http://localhost:8888/mongo/findAll返回:[{ "_id" : "1" , "name" : "wangwu" , "age" : 32}]
删除操作:
http://localhost:8888/mongo/remove/1查询:http://localhost:8888/mongo/findAll返回[]
2.5MongoDBjava客户端增加_class字段去除方法:
方法一:不使用mongoTemplate做直接插入,通过获取集合后执行插入方法,修改插入方法如下:
@ResponseBody @RequestMapping("/insert/{name}/{age}/{id}") public String insert(@PathVariable String name,@PathVariable int age,@PathVariable String id){ //构建数据对象 DBObject data = new BasicDBObject("name",name); data.put("age",age); data.put("_id",id); //改行代码,如果没有集合mongotest,会自动创建一个,然后插入数据,为了方便修改,我们将id设置为前台录入。 mongoTemplate.getCollection("mongotest").insert(data); return "success"; }
这时在执行上面插入查询操作
http://localhost:8888/mongo/insert/lisi/22/1http://localhost:8888/mongo/findAll[{ "_id" : "1" , "name" : "lisi" , "age" : 22}]
可以看到,没有多出的_class字段。
方法二:修改MongoDB的配置信息,自己创建MappingMongoConverter对象。创建MongoConfiguration类:
package com.haier.alertmanager.configuration;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.mongodb.MongoDbFactory;import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;import org.springframework.data.mongodb.core.convert.MappingMongoConverter;import org.springframework.data.mongodb.core.mapping.MongoMappingContext;/** * @description mongo配置类,用于去掉java自动生成的_class字段 * @date 2017/11/16 * @author Niemingming */@Configurationpublic class MongoConfiguration { @Autowired private MongoDbFactory mongoDbFactory; @Autowired private MongoMappingContext mongoMappingContext; @Bean public MappingMongoConverter mappingMongoConverter(){ DefaultDbRefResolver refResolver = new DefaultDbRefResolver(mongoDbFactory); MappingMongoConverter converter = new MappingMongoConverter(refResolver,mongoMappingContext); //将默认的mapper类型设置为null,这样就不会再库中生成额外字段。 converter.setTypeMapper(new DefaultMongoTypeMapper(null)); return converter; }}
我们将默认的类型设置为null,之后在使用mongoTemplate.insert()时,也不会在插入_class字段了。
代码已经上传到GitHub上了。
源码地址
阅读全文
0 0
- MongoDB学习笔记《二》
- MongoDB学习笔记<二>
- MongoDB 学习笔记二
- Mongodb学习笔记(二)
- mongoDB学习笔记二
- mongodb学习笔记二
- MongoDB学习笔记(二) MongoDB常用命令
- MongoDB学习笔记(二) MongoDB基本使用
- Mongodb学习笔记二(Mongodb基本命令)
- Mongodb学习笔记二(Mongodb基本命令)
- Mongodb学习笔记二:常用命令
- Mongodb学习笔记速记(二)
- MongoDB学习笔记(二)
- MongoDB学习笔记(二)
- 学习《Mongodb权威指南》学习笔记 (二)
- MongoDB 学习笔记(二) 之查询
- MongoDB学习笔记(二)(查询)
- mongoDB学习笔记--shell基本语法(二)
- Luogu11月月赛T1 高兴的津津
- 总架构师眼里的架构和架构师的成长之道
- Python 练习实例13
- 解决Chrome 打开时“发生个人资料错误”和安装失败0xa0430721
- 转载大神的对雅可比矩阵和海森矩阵的讲解
- mongodb学习笔记二
- prim 算法 最小生成 树
- 动态数组
- Java网络编程之套接字(Socket编程)
- LUOGU2819--图的m染色问题
- 12ASuper Agent
- 安装及配置Sublime Text 3
- 2017/11/26
- Docker2(docker仓库+cgroup)