SpringBoot整合MongoDB实现分页排序查询及CRUD

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, "添加成功");
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我三胖哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值