1:MongoDB:是一个数据库 ,高性能、无模式、文档性,目前nosql中最热门的数据库,开源产品,基于c++开发。是nosql数据库中功能最丰富,最像关系数据库的。
2:他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
3:对比事务安全,MongoDB更关注高的插入速度。如果你需要加载大量低价值的业务数据,那么MongoDB将很适合你的用例。
4:数据库扩展是非常有挑战性的,当单表格大小达到5-10GB时,MySQL表格性能会毫无疑问的降低。如果你需要分片并且分割你的数据库,MongoDB将很容易实现这一点。
5:MongoDB支持二维空间索引,因此比起关系型数据库而言可以快速及精确的从指定位置获取数据。
简而言之,博主的理解就是当数据量特别大的时候mongodb在数据的读取和插入都会比mysql这些更快更稳定。
1:SpringDataMongoDB是Spring Data的一个子项目,用来封装对MongoDB的操作.SpringDataMongoDB的关键功能领域是一个以POJO为中心的模型,用于与MongoDBCollection交互并轻松编写Repository样式的数据访问层。
简而言之博主的理解就是SpringData将mongodb这个非关系型数据库封装了,以便于更方便的应用在Spring应用中,就像SpringDatajpa那样让所有的spring家族项目对于数据库的操作都变成一样,方便使用,下面会讲怎么使用。
1:第一步将最新的SpringDatamongdb的依赖写入pom文件
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-mongodbartifactId>
dependency>
这样idea会自动导入相应的jar包,然后就可以调用相应的方法实现数据操作了
2:第二步在navicat premium (会收费,但是总有方法对吧)中创建monggo集合(就是表)对了安装mongdb网上教程很多,这里就不介绍了。
comment这是博主创建评论集合(就是表)已经存了一些数据。
第三步:在你的项目文件的application.yml文件中加上连接数据库的语句
spring:
application:
name: ziwang-comment//这个是这个微服务的唯一指定名
data:
mongodb:
host: 47.101.39.237//因为博主的mongodb是搭建在阿里云上的所以这里是阿里云上的ip地址,本地的就是location那一套和关系型数据库一样
port: 27017//端口不用解释吧
database: zw-conment//这里是数据库名不是表明
package com.ziwang.comment.controller;
import com.ziwang.comment.pojo.Comment;
import com.ziwang.comment.service.CommentService;
import entity.Result;
import entity.StatusCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@RestController
@CrossOrigin
@RequestMapping("/comment")
public class CommentController {
@Autowired
private CommentService commentService;
@GetMapping("/findAll")
public Result findAll(){
return new Result(true, StatusCode.OK,"查询成功",commentService.findAll());
}
@GetMapping (value = "/find/{sid}")
public List<Map<String, Object>> findById(@PathVariable String sid) {
System.out.println("查询评论");
return commentService.findBySid(sid) ;
}
@PostMapping("/save/{sid}")
public Result save(@RequestBody Comment comment,@PathVariable String sid){
commentService.save(comment,sid);
return new Result(true,StatusCode.OK,"保存成功");
}
@RequestMapping(value = "/{commentId}",method = RequestMethod.PUT)
public Result update(@PathVariable String commentId,@RequestBody Comment comment){
comment.set_id(commentId);
commentService.updata(comment);
return new Result(true,StatusCode.OK,"修改成功");
}
@RequestMapping(value = "/{commentId}",method = RequestMethod.DELETE)
public Result delete(@PathVariable String commentId){
commentService.deleteById(commentId);
return new Result(true,StatusCode.OK,"删除成功");
}
}
package com.ziwang.comment.service;
import com.ziwang.comment.dao.CommentRepository;
import com.ziwang.comment.pojo.Comment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import util.IdWorker;
import java.text.SimpleDateFormat;
import java.util.*;
@Service
@Transactional
public class CommentService {
@Autowired
private CommentRepository commentRepository;
@Autowired
private IdWorker idWorker;
/**
*
* * 查询全部记录
* * @return
*/
public List<Comment> findAll() {
return commentRepository.findAll();
}
/**
* 根据主键查询实体
*
* @return
*/
public List<Map<String, Object>> findBySid(String sid) {
List<Map<String, Object>> result = new ArrayList<>();
List<Comment> comments = commentRepository.findBySid(sid);
comments.forEach(comment -> {
Map<String, Object> map = new HashMap<>();
map.put("comment",comment.getContent());
map.put("time",comment.getPublishtime());
result.add(map);
});
return result;
}
public void save(Comment comment,String sid) {
SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
comment.setPublishtime(bartDateFormat.format(date));
comment.set_id(idWorker.nextId() + "");
comment.setThumbup(0);
System.out.println(sid);
comment.setSid(sid);
commentRepository.save(comment);
}
public void updata(Comment comment) {
commentRepository.save(comment);
}
public void deleteById(String id) {
commentRepository.deleteById(id);
}
}
package com.ziwang.comment.dao;
import com.ziwang.comment.pojo.Comment;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;
public interface CommentRepository extends MongoRepository<Comment,String> {
List<Comment> findBySid(String sid);//这个接口可以不用写方法,他自己有很多常规的方法,但有些不能满足使用要求就要自己写了。
}
package com.ziwang.comment.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.data.annotation.Id;
import java.io.Serializable;
public class Comment implements Serializable {
@Id
private String _id;
private String sid;
private String content;//评论内容
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private String publishtime;//评论时间
private String userid;
private String nickname;//评论人
private Integer thumbup;//点赞数
private String comment;//回复
private String parentid;//父级id
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPublishtime() {
return publishtime;
}
public void setPublishtime(String publishtime) {
this.publishtime = publishtime;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public Integer getThumbup() {
return thumbup;
}
public void setThumbup(Integer thumbup) {
this.thumbup = thumbup;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public String getParentid() {
return parentid;
}
public void setParentid(String parentid) {
this.parentid = parentid;
}
}
package com.ziwang.comment;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import util.IdWorker;
@EnableFeignClients
@EnableDiscoveryClient
@EnableEurekaClient
@SpringBootApplication
public class CommentApplication {
public static void main(String[] args) {
SpringApplication.run(CommentApplication.class,args);
}
@Bean//这里是我其他模块里的方法主要是雪花算法生成id的。需要你在依赖里面加入那个模块的依赖。这里也需要放在启动类里面加一个@Bean注解。
public IdWorker idWorker(){
return new IdWorker(1, 1);
}
}
ok完成了,接下来就需要你们去写前端页面了。前后端交互博主用的ajax。
第一次写博客可能很多地方不是还能熟练,会慢慢进步啦