1. 环境搭建
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
application.yml
server:
port: 9006
spring:
data:
mongodb:
host: 192.168.1.90 # mongodb连接地址
database: sunmone # 数据库名称
启动类 Application
@SpringBootApplication
public class SpitApplication {
public static void main(String[] args) {
SpringApplication.run(SpitApplication.class);
}
}
实体类 Spit
package com.tensquare.spit.pojo;
import java.io.Serializable;
import java.util.Date;
/**
* 吐槽实体类
*/
public class Spit implements Serializable {
private String _id;//主键
private String content;//吐槽内容
private Date publishtime;//发布日期
private String userid;//发布人ID
private String nickname;//昵称
private Integer visits;//浏览量
private Integer thumbup;//点赞数
private Integer share;//分享数
private Integer comment;//回复数
private String state;//状态
private String parentid;//上级ID
... GET AND SET ...
}
2. 代码实现
Dao层
import com.tensquare.spit.pojo.Spit;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;
/**
* extends MongoRepository<Spit, String>
* 继承: 操作什么数据库就继承什么数据库的 Repository 这里是 MongoRepository
* 泛型: <实体类, 主键类型>
*/
public interface SpitDao extends MongoRepository<Spit, String> {
/**
* 根据parentid查询记录,分页查询并倒序排序
* @param parentid
* @param pageRequest
* @return
*/
public Page<Spit> findByParentid(String parentid, Pageable pageRequest);
}
Service 层
@Service
public class SpitService {
@Autowired
private SpitDao spitDao;
// 增删改查方法的调用和mysql数据库语句一样
// 查询所有
public List<Spit> findAll() {
return spitDao.findAll();
}
// 按ID查询
public Spit findById(String id) {
return spitDao.findById(id).get();
}
// 修改
public void update(Spit spit) {
spitDao.save(spit);
}
// 删除
public void deleteById(String id) {
spitDao.deleteById(id);
}
/**
* 点赞
* 这里不使用Dao操作了,换一种操作底层的方式使用 MongoTemplate
*/
@Autowired
private MongoTemplate mongoTemplate;
public void thumbupUpdate(String id) {
// 创建query对象查询
Query query = new Query();
// 添加查询条件 _id = id
query.addCriteria(Criteria.where("_id").is(id));
// 创建 update 对象
Update update = new Update();
// inc(要修改的字段,1就是加一,-1就是减一)
update.inc("thumbup", 1);
// 调用修改方法,传入 query对象 传入 update对象 传入要修改的实体类
mongoTemplate.updateFirst(query, update, Spit.class);
}
/**
* 根据parentid查询记录,分页查询并倒序排序
* @return
*/
public Page<Spit> findByParentId(String parentid, int page, int size) {
// 创建分页对象 ,并按照 userid 倒序排序
PageRequest pageRequest = PageRequest.of(page - 1, size, Sort.by(Sort.Order.desc("userid")));
// 调用Dao层,使用方法名查询
return spitDao.findByParentid(parentid, pageRequest);
}
}
Controller层
@RestController
@CrossOrigin
@RequestMapping("/spit")
public class SpitController {
@Autowired
private SpitService spitService;
/**
* 点赞
* @param spitId
* @return
*/
@RequestMapping(value = "/thumbup/{spitId}", method = RequestMethod.PUT)
public Result thumbup(@PathVariable String spitId) {
spitService.thumbupUpdate(spitId);
return new Result(true, StatusCode.OK, "点赞成功");
}
/**
* 根据parentid查询记录列表
* @param parentid
* @param page
* @param size
* @return
*/
@RequestMapping(value = "/comment/{parentid}/{page}/{size}", method = RequestMethod.GET)
public Result comment(@PathVariable String parentid, @PathVariable int page, @PathVariable int size) {
Page<Spit> pageList = spitService.findByParentId(parentid, page, size);
return new Result(true, StatusCode.OK, "查询成功",
new PageResult(pageList.getTotalElements(), pageList.getContent()));
}
@RequestMapping(method = RequestMethod.GET)
/**
* 查询所有
*/
public Result findAll() {
List<Spit> all = spitService.findAll();
return new Result(true, StatusCode.OK, "查询成功", all);
}
/**
* 添加数据
*
* @return
*/
@RequestMapping(method = RequestMethod.POST)
public Result save(@RequestBody Spit spit) {
spitService.save(spit);
return new Result(true, StatusCode.OK, "添加成功");
}
}