- MongoDB回顾
MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。MongoDB支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型,也因为他的存储格式也使得它所存储的数据在Nodejs程序应用中使用非常流畅。既然称为NoSQL数据库,Mongo的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。但是,MongoDB也不是万能的,同MySQL等关系型数据库相比,它们在针对不同的数据类型和事务要求上都存在自己独特的优势。在数据存储的选择中,坚持多样化原则,选择更好更经济的方式,而不是自上而下的统一化。较常见的,我们可以直接用MongoDB来存储键值对类型的数据,如:验证码、Session等;由于MongoDB的横向扩展能力,也可以用来存储数据规模会在未来变的非常巨大的数据,如:日志、评论等;- 由于MongoDB存储数据的弱类型,也可以用来存储一些多变json数据,如:与外系统交互时经常变化的JSON报文。
- 而对于一些对数据有复杂的高事务性要求的操作,如:账户交易等就不适合使用MongoDB来存储。
- 引入MongoDB依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
- MongoDB的配置【application.properties】
# MONGODB (MongoProperties)# Mongo database URI. When set, host and port are ignored.#spring.data.mongodb.uri=mongodb://root:root@localhost:27017/mongotest# Mongo server host.spring.data.mongodb.host=localhost# Mongo server port.spring.data.mongodb.port=27017# Login user of the mongo server.spring.data.mongodb.username=root# Login password of the mongo server.spring.data.mongodb.password=root# Authentication database name.spring.data.mongodb.authentication-database=mongotest# Database namespring.data.mongodb.database=mongotest# Fully qualified name of the FieldNamingStrategy to use.#spring.data.mongodb.field-naming-strategy=# GridFS database name.#spring.data.mongodb.grid-fs-database=# Enable Mongo repositories.spring.data.mongodb.repositories.enabled=true# Mongo database URI. When set, host and port are ignored.#spring.data.mongodb.uri=mongodb://localhost/test
- MongoDB的POJO
package com.newcapec.dao.domain;import org.springframework.data.annotation.Id;/*** @version V1.0* @Title: Mongo实体* @ClassName: com.newcapec.dao.domain* @Description:* @author: FLY* @date:2017/10/178:06*/publicclassUserMongoDo {//id属性是给mongodb用的,用@Id注解修饰@Idprivate String id;private String name;privateint age;public String getId() {return id;}publicvoidsetId(String id) {this.id = id;}public String getName() {return name;}publicvoidsetName(String name) {this.name = name;}publicintgetAge() {return age;}publicvoidsetAge(int age) {this.age = age;}@Overridepublicbooleanequals(Object o) {if (this == o) {returntrue;}if (o == null || getClass() != o.getClass()) {returnfalse;}UserMongoDothat= (UserMongoDo) o;if (age != that.age) {returnfalse;}if (id != null ? !id.equals(that.id) : that.id != null) {returnfalse;}return name != null ? name.equals(that.name) : that.name == null;}@OverridepublicinthashCode() {intresult= id != null ? id.hashCode() : 0;result = 31 * result + (name != null ? name.hashCode() : 0);result = 31 * result + age;return result;}@Overridepublic String toString() {return"UserMongoDo{" +"id='" + id + '\'' +", name='" + name + '\'' +", age=" + age +'}';}}
- MongoDB的DAO层【需要继承MongoRepository接口】
package com.newcapec.dao.repository.mongo;import com.newcapec.dao.domain.UserMongoDo;import org.springframework.data.mongodb.repository.MongoRepository;/*** @version V1.0* @Title: Mongo--DAO层的接口* @ClassName: com.newcapec.dao.repository.mongo* @Description: 继承自MongoRepository接口,MongoRepository接口包含了常用的CRUD操作,* 例如:save、insert、findall等等。我们可以定义自己的查找接口,* @author: FLY* @date:2017/10/178:09*/publicinterfaceUserMongoRepositoryextendsMongoRepository<UserMongoDo,String> {UserMongoDo findByName(String name);}
- MongoDB的Controller层
package com.newcapec.controller.mongo;import com.newcapec.dao.domain.UserMongoDo;import com.newcapec.dao.repository.mongo.UserMongoRepository;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @version V1.0* @Title:* @ClassName: com.newcapec.controller.mongo* @Description:* @author: FLY* @date:2017/10/178:21*/@Api(value = "MONGO服务", description = "基本的MONGO增删改查API")@RestController@RequestMapping(value = "/mongo")publicclassUserMongoController {privatefinalLoggerlogger= LoggerFactory.getLogger(this.getClass());@Autowiredprivate UserMongoRepository userMongoRepository;@Autowiredprivate MongoTemplate mongoTemplate;@ApiOperation(value = "新建用户", notes = "根据UserMongoDo对象创建用户")@RequestMapping(value = "save",method = RequestMethod.POST)public String save(){UserMongoDouserMongoDo=newUserMongoDo();userMongoDo.setName("张三");userMongoDo.setAge(20);userMongoRepository.save(userMongoDo);logger.info("根据UserMongoDo对象创建用户:{}", userMongoDo);userMongoDo = newUserMongoDo();userMongoDo.setName("李四");userMongoDo.setAge(30);userMongoRepository.save(userMongoDo);logger.info("根据UserMongoDo对象创建用户:{}", userMongoDo);return"ok";}@ApiOperation(value = "查询所有UserMongoDo对象", notes = "查询所有UserMongoDo对象")@RequestMapping(value = "findAll", method = RequestMethod.GET)public List<UserMongoDo> find(){List<UserMongoDo> userMongoDoList = userMongoRepository.findAll();logger.info("查询所有UserMongoDo对象:{}", userMongoDoList);return userMongoDoList;}@ApiOperation(value = "根据姓名查询UserMongoDo对象", notes = "根据姓名查询UserMongoDo对象")@RequestMapping(value = "findByName", method = RequestMethod.GET)public UserMongoDo findByName(){return userMongoRepository.findByName("张三");}@RequestMapping("findAllByTemplate")public List<UserMongoDo> findAllByTemplate(){return mongoTemplate.findAll(UserMongoDo.class);}}
- 效果图
参考来源: http://412887952-qq-com.iteye.com/blog/2318852
参考来源:http://www.jianshu.com/p/879caef9b0bc
