1 环境准备
(1)POM.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
(2)配置文件 application.yaml
spring:
data:
mongodb:
host: 192.168.70.129
database: spitdb
2 代码
(1)准备实体类
@Data//Lombok工具,生成getter&setter
public class Spit {
@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;
}
(2)数据层
public interface SpitDao extends MongoRepository<Spit, String> {
public Page<Spit> findByParentid(String parentid, Pageable pageable);
}
(3)Service层
@Service
@Transactional
public class SpitService {
@Autowired
private SpitDao spitDao;
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private IdWorker idWorker;
/**
* 点赞
* 第一个方法虽然实现起来比较简单,但是执行效率并不高,
* 因为我只需要将点赞数加1就可以了,
* 没必要查询出所有字段修改后再更新所有字段
*
* @param id
*/
// public void updateThumbup(String id) {
// Spit spit = spitDao.findById(id).get();
// spit.setThumbup(spit.getThumbup() + 1);
// spitDao.save(spit);
// }
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");
}
/**
* 根据上级ID查询吐槽列表
*
* @param parentid
* @param page
* @param size
* @return
*/
public Page<Spit> findByParentid(String parentid, int page, int size) {
return spitDao.findByParentid(parentid, PageRequest.of(page - 1, size));
}
/**
* 查询全部记录
*/
public List<Spit> findAll() {
return spitDao.findAll();
}
/**
* 根据id查询数据
*
* @param id
* @return
*/
public Spit findById(String id) {
//增加访问量
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(id));
Update update = new Update();
update.inc("visits", 1);
return spitDao.findById(id).get();
}
/**
* 新增数据
*
* @param spit
*/
public void add(Spit spit) {
spit.set_id(idWorker.nextId() + "");//主键值
spit.setPublishtime(Calendar.getInstance().getTime());//发布日期
spit.setVisits(0);//浏览量
spit.setShare(0);//分享数
spit.setThumbup(0);//点赞数
spit.setComment(0);//回复数
spit.setState("1");//状态
if (spit.getParentid() != null && !"".equals(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);
}
/**
* 修改
*
* @param spit
*/
public void update(Spit spit) {
spitDao.save(spit);
}
/**
* 删除
*
* @param id
*/
public void deleteById(String id) {
spitDao.deleteById(id);
}
}
(4)Controller层
@RestController
@CrossOrigin
@RequestMapping("/spit")
public class SpitController {
@Autowired
private SpitService spitService;
@Autowired
private RedisTemplate redisTemplate;
/**
* 点赞
*
* @param id
* @return
*/
@PutMapping("/thumbup/{spitId}")
public Result updateThumbup(@PathVariable("spitId") String id) {
// TODO需要补全点赞逻辑
redisTemplate.opsForValue().set("thumbup_" + userid + "_" + id, "1");
return ResultUtil.successMsg("点赞成功");
}
/**
* 根据上级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> pageSpit = spitService.findByParentid(parentId, page, size);
return ResultUtil.success(new PageResult<Spit>(pageSpit.getTotalElements(), pageSpit.getContent()));
}
/**
* 查询全部数据
*
* @return
*/
@GetMapping
public Result findAll() {
return ResultUtil.success(spitService.findAll());
}
/**
* 根据ID查询
*
* @param id
* @return
*/
@GetMapping("/{id}")
public Result findById(@PathVariable String id) {
return ResultUtil.success(spitService.findById(id));
}
/**
* 增加数据
*
* @param spit
* @return
*/
@PostMapping
public Result add(@RequestBody Spit spit) {
spitService.add(spit);
return ResultUtil.success();
}
/**
* 修改数据
*
* @param spit
* @param id
* @return
*/
@PutMapping("/{id}")
public Result update(@RequestBody Spit spit, @PathVariable String id) {
spit.set_id(id);
spitService.update(spit);
return ResultUtil.successMsg("修改成功");
}
@DeleteMapping("/{id}")
public Result deleteById(@PathVariable String id) {
spitService.deleteById(id);
return ResultUtil.successMsg("删除成功");
}
}