赞
踩
# docker拉取镜像 [root@goblin~]# docker pull mongo:3.2.10 Trying to pull repository docker.io/library/mongo ... 3.2.10: Pulling from docker.io/library/mongo 386a066cd84a: Pull complete 524267bc200a: Pull complete 476d61c7c43a: Pull complete 0750d0e28b90: Pull complete 4bedd83d0855: Pull complete b3b5d21a0eda: Pull complete 7354b6c26240: Pull complete db792d386b51: Pull complete a867bd77950c: Pull complete Digest: sha256:532a19da83ee0e4e2a2ec6bc4212fc4af26357c040675d5c2629a4e4c4563cef Status: Downloaded newer image for docker.io/mongo:3.2.10 # 查看镜像 [root@goblin~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/redis latest 621ceef7494a 8 weeks ago 104 MB docker.io/rabbitmq 3-management 30e33de9be86 11 months ago 184 MB docker.io/tomcat latest 5692d26ea179 13 months ago 507 MB docker.io/mysql 5.7 c4f186b9e038 13 months ago 435 MB docker.io/rmohr/activemq latest 7c58d2d8d6af 2 years ago 569 MB docker.io/webcenter/activemq latest 3af156432993 4 years ago 422 MB docker.io/mongo 3.2.10 fe9198c04d62 4 years ago 342 MB
# docker 启动镜像
[root@goblin ~]# docker run -di --name springCloudGoblinMongoDB -p 27017:27017 fe9198c04d62
9aae0b3a3f16acb5c8a35b85c2f104397216c85ba8c20ea2d4e474280951481d
# 查看运行的容器
[root@goblin ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9aae0b3a3f16 fe9198c04d62 "/entrypoint.sh mo..." 14 seconds ago Up 13 seconds 0.0.0.0:27017->27017/tcp springCloudGoblinMongoDB
b37e28ee468e 621ceef7494a "docker-entrypoint..." 26 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp springCloudGoblinRedis
18931167fae2 c4f186b9e038 "docker-entrypoint..." 5 days ago Up 2 hours 0.0.0.0:3306->3306/tcp, 33060/tcp springcloudvue
C:\Users\lenovo>mongo 192.168.1.105 #不是默认端口的需要将端口加上
MongoDB shell version: 3.2.10
connecting to: 192.168.1.105/test
Welcome to the MongoDB shell.
..........
# 选择和创建数据库
> use spit
switched to db spit
# db.集合名称.insert(数据)
>db.spit.insert({"_id":"1","visits":NumberInt("0"),"share":NumberInt("0"),"thumbup":NumberInt("0"),"comment":NumberInt("0"),"state":"1"})
WriteResult({ "nInserted" : 1 }) # 说明成功插入一条数据
# 查询
> db.spit.find()
{ "_id" : "1", "visits" : 0, "share" : 0, "thumbup" : 0, "comment" : 0, "state" : "1" }
客户端(安装在了windows上)是使用的 mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi 软件;它既是服务端,也是客户端;示例中只用客户端,不用服务端,因为服务端用的是linux的docker启动的服务端;
mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi 安装完成之后,配置环境变量(直接在path中新建将该软件安装的路径加上)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 引入MongoDB的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.11</version> </dependency>
server:
port: 8090
spring:
application:
name: goblin_spit
data:
mongodb:
host: 192.168.1.105 # mongodb主机ip;端口为默认27017可以省略不配
database: spit#数据库名;
redis:
host: 192.168.1.105
package com.goblin.entity; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import java.io.Serializable; import java.util.Date; @Entity @Table(name = "spit") public class Spit implements Serializable { @Id private String id; private String content; private Date publishtime; private String userid; private String nickname; private Integer visits; private Integer thumbup; private Integer share; private Integer comment; private String state; private String parentid; // getter/setter方法省略 }
package com.goblin; import com.goblin.util.IdWorker; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; import org.springframework.context.annotation.Bean; @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class })//忽略数据源自动配置(解决使用mongodb启动报错的问题(Failed to determine a suitable driver class)) public class SpitApplication { public static void main(String[] args) { SpringApplication.run(SpitApplication.class, args); } @Bean // @Bean将IdWorker 注入到容器 public IdWorker idWorker(){// ID生成工具;采用了雪花算法;源码网上有可自行下载 return new IdWorker(1, 1); } }
package com.goblin.dao; import com.goblin.entity.Spit; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.mongodb.repository.MongoRepository; // 持久层继承mongo仓库; MongoRepository<实体类, 主键的类型> public interface SpitDao extends MongoRepository<Spit, String> { /** * 根据上级ID查询吐槽列表(分页) * @param parentId * @param pageable * @return */ Page<Spit> findByParentid(String parentId, Pageable pageable); }
package com.goblin.service; import com.goblin.dao.SpitDao; import com.goblin.entity.Spit; import com.goblin.util.IdWorker; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; 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 org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; @Service @Transactional public class SpitService { @Autowired private SpitDao spitDao; @Autowired private IdWorker idWorker; @Autowired private MongoTemplate mongoTemplate; /** * 增加分享数 * @param id */ public void shareAdd(String id) { Query query = new Query(); query.addCriteria(Criteria.where("_id").is(id)); Update update = new Update(); update.inc("share", 1); mongoTemplate.updateFirst(query, update, "spit"); } /** * 增加浏览量 */ public void visitsAdd(String id){ Query query = new Query(); query.addCriteria(Criteria.where("_id").is(id)); Update update = new Update(); update.inc("visits", 1); mongoTemplate.updateFirst(query, update, "spit"); } /** * 发布吐槽 * @param spit */ public void add(Spit spit) { spit.setId(idWorker.nextId() + ""); spit.setThumbup(0); spit.setComment(0); spit.setContent("content"); spit.setNickname("goblin"); spit.setPublishtime(new Date()); spit.setShare(0); spit.setState("1"); spit.setUserid("1111"); spit.setVisits(0); if (StringUtils.isNotBlank(spit.getParentid())){ Query query = new Query(); query.addCriteria(Criteria.where("_id").is(spit.getParentid())); Update update = new Update(); update.inc("comment", 1); mongoTemplate.updateFirst(query, update, "spit"); } spitDao.save(spit); } /** * 点赞(方式2) * @param id */ public void updateThumbup(String id) { Query query = new Query(); query.addCriteria(Criteria.where("_id").is(id)); Update update = new Update(); update.inc("thumbup", 1); mongoTemplate.updateFirst(query, update, "spit"); } /** * 点赞(方式1) * @param id */ /*public void updateThumbup(String id) { Spit spit = spitDao.findById(id).get(); spit.setThumbup(spit.getThumbup()+1); spitDao.save(spit); }*/ /** * 根据上级ID查询吐槽列表 * @param parentId * @param page * @param size * @return */ public Page<Spit> findByParentid(String parentId, int page, int size){ PageRequest pageRequest = PageRequest.of(page -1, size); return spitDao.findByParentid(parentId, pageRequest); } /** * 查询所有 * @return */ public List<Spit> findAll(){ return spitDao.findAll(); } /** * 根据id查询 * @param id * @return */ public Spit findById(String id){ return spitDao.findById(id).get(); } /** * 保存 * @param spit */ public void save(Spit spit){ spit.setId(idWorker.nextId() + ""); spitDao.save(spit); } /** * 更新 * @param spit */ public void update(Spit spit){ spitDao.save(spit); } /** * 根据id删除 * @param id */ public void deleteById(String id) { spitDao.deleteById(id); } }
package com.goblin.controller; import com.goblin.entity.PageResult; import com.goblin.entity.Result; import com.goblin.entity.Spit; import com.goblin.entity.StatusCode; import com.goblin.service.SpitService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @CrossOrigin @RequestMapping("/spit") public class SpitController { @Autowired private SpitService spitService; @Autowired private RedisTemplate redisTemplate; /** * 分享数 * @param id * @return */ @GetMapping("/share/{id}") public Result share(@PathVariable String id){ spitService.shareAdd(id); return new Result(true, StatusCode.OK, "分享成功"); } /** * 访问量 * @param id * @return */ @GetMapping("/visits/{id}") public Result visits(@PathVariable String id) { spitService.visitsAdd(id); return new Result(true, StatusCode.OK, "访问量增加成功"); } /** * 点赞(禁止重复点赞) * @param id */ @GetMapping("/thumbup/{id}") public Result updateThumbup(@PathVariable String id) { String userId = "1";//模拟用户id if (redisTemplate.opsForValue().get("thumbup_" + userId + "_" + id) != null) {// 查询redis缓存是否有点赞记录 return new Result(true, StatusCode.ERROR, "你已经点过赞了"); } spitService.updateThumbup(id); redisTemplate.opsForValue().set("thumbup_" + userId + "_" + id, "1");// 点赞记录存入redis缓存中 return new Result(true, StatusCode.OK, "点赞成功"); } /** * 点赞 * @param id */ /*@PutMapping("/thumbup/{id}") public Result updateThumbup(@PathVariable String id) { spitService.updateThumbup(id); return new Result(true, StatusCode.OK, "点赞成功"); }*/ /** * 根据上级ID查询吐槽列表 * @param parentId * @param page * @param size * @return */ @GetMapping("/comment/{parentId}/{page}/{size}") public Result findByParentid(@PathVariable String parentId, @PathVariable int page, @PathVariable int size){ Page<Spit> spits = spitService.findByParentid(parentId, page, size); return new Result(true, StatusCode.OK, "查询成功", new PageResult<Spit>(spits.getTotalElements(),spits.getContent())); } /** * 查询全部数据 * @return */ @GetMapping public Result findAll(){ List<Spit> spits = spitService.findAll(); return new Result(true, StatusCode.OK, "查询成功", spits); } /** * 根据id查询 * @param Id * @return */ @GetMapping("/{id}") public Result findById(@PathVariable String Id) { return new Result(true, StatusCode.OK, "查询成功", spitService.findById(Id)); } /** * 保存数据 * @param spit * @return */ @PostMapping public Result save(@RequestBody Spit spit) { spitService.save(spit); return new Result(true, StatusCode.OK, "保存成功"); } /** * 更新数据 * @param spit * @return */ @PutMapping("/{id}") public Result update(@RequestBody Spit spit, @PathVariable String id) { spit.setId(id); spitService.update(spit); return new Result(true, StatusCode.OK, "修改成功"); } /** * 根据id删除 * @param id * @return */ @DeleteMapping("/{id}") public Result deleteById(@PathVariable String id) { spitService.deleteById(id); return new Result(true, StatusCode.OK, "删除成功"); } }
| 字段名称 | 字段含义 | 字段类型 |
|---|---|---|
| _id | ID | 文本 |
| content | 吐槽内容 | 文本 |
| publishtime | 发布日期 | 日期 |
| userid | 发布人ID | 文本 |
| nickname | 发布人昵称 | 文本 |
| visits | 浏览量 | 整型 |
| thumbup | 点赞数 | 整型 |
| share | 分享数 | 整型 |
| comment | 回复数 | 整型 |
| state | 是否可见 | 文本 |
| parentid | 上级ID | 文本 |
项目启动成功,使用postman工具进行的测试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。