Spring Boot和MongoDB的使用

该文展示了如何在SpringBoot应用中整合MongoDB,包括通过pom.xml添加依赖,配置application.properties文件连接数据库,定义实体类BlockDTO,以及实现数据的保存、更新、删除、分页查询和特定条件查询功能。
摘要由CSDN通过智能技术生成

MongoDB整合Spring Boot

pom.xml

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

application.properties

// 有密码
spring.data.mongodb.uri: mongodb://用户名:密码@ip:端口/数据库
// 无密码
spring.data.mongodb.uri: mongodb://ip:端口/数据库

实体类

@Getter
@Setter
@ToString
public class BlockDTO {
	@Id
    private String blockId;
    private String userId;
    private int belong;
    private int mode;
    private int status;
    private String title;
    private String content;
}

数据操作

@Component
@Slf4j
public class BlockImpl {
    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 保存数据
     * @param blockDTO
     * @return
     */
    public ResponseData saveBlock(BlockDTO blockDTO) {
        BlockDTO dto = mongoTemplate.insert(blockDTO);
        return ResponseData.ok().setData(dto);
    }
    /**
     * 修改数据
     * @param blockId
     * @param blockDTO
     * @return
     */
    public ResponseData updateBlock(String blockId, BlockDTO blockDTO) {
        BlockDTO block = mongoTemplate.findById(blockId, BlockDTO.class);
        if (block == null) {
            return ResponseData.ok(GlobalStatusCode.NOINFO.getMessage());
        }
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(block.getBlockId()));
        Update update = new Update();
        update.set("title", "你好呀");
        UpdateResult dto = mongoTemplate.upsert(query, update, BlockDTO.class);
        return ResponseData.ok().setData(dto);
    }

    /**
     * 删除数据
     * @param blockId
     * @return
     */
    public ResponseData deleteBlock(String blockId) {
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(blockId));
        if (!mongoTemplate.exists(query, BlockDTO.class)) {
            return ResponseData.ok(GlobalStatusCode.NOINFO.getMessage());
        }
        mongoTemplate.remove(query, BlockDTO.class);
        return ResponseData.ok();
    }

    /**
     * 按条件分页查询数据
     * @param jsonObject
     * @return
     */
    public ResponseData findBlockList(JSONObject jsonObject) {
        JSONObject res = new JSONObject();
        int pageNum = jsonObject.containsKey("pageNum") ? jsonObject.getInteger("pageNum") : 1;
        int pageSize = jsonObject.containsKey("pageSize") ? jsonObject.getInteger("pageSize") : 10;
        if (jsonObject.containsKey("userId") && "".equals(jsonObject.get("userId"))) {
            return ResponseData.error(GlobalStatusCode.MISSPARAMTER);
        }
        Query query = new Query();
        query.addCriteria(Criteria.where("userId").is(jsonObject.get("userId")));
        query.addCriteria(Criteria.where("status").is(0));

        Criteria criteria = Criteria.where("userId").is(jsonObject.get("userId"));
        criteria.and("status").is(0);
        if (jsonObject.containsKey("mode") && jsonObject.getInteger("mode") != 0) {
            criteria.and("mode").is(jsonObject.get("mode"));
            query.addCriteria(Criteria.where("mode").is(jsonObject.get("mode")));
        }

        Aggregation agg = newAggregation(
                match(criteria),
                skip((pageNum - 1) * pageSize),
                limit(pageSize)
        );
        long total = mongoTemplate.count(query, BlockDTO.class);
        AggregationResults<BlockDTO> aggregationResults = mongoTemplate.aggregate(agg,"blockDTO", BlockDTO.class);
        ArrayList arrayList = (ArrayList) aggregationResults.getRawResults().get("results");
        res.put("total", total);
        res.put("blockList", arrayList);
        return ResponseData.ok().setData(res);
    }

    /**
     * 详情查询
     * @param blockId
     * @return
     */
    public ResponseData findBlockById(String blockId) {
        BlockDTO block = mongoTemplate.findById(blockId, BlockDTO.class);
        if (block == null) {
            return ResponseData.ok(GlobalStatusCode.NOINFO.getMessage());
        }
        return ResponseData.ok().setData(block);
    }

    /**
     * 分组查询标题
     * @param jsonObject
     * @return
     */
    public ResponseData findTitleList(JSONObject jsonObject) {
        if (!jsonObject.containsKey("userId") && "".equals(jsonObject.get("userId"))) {
            return ResponseData.error(GlobalStatusCode.MISSPARAMTER);
        }
        Aggregation agg = newAggregation(
                match(new Criteria("userId").is(jsonObject.get("userId")).and("status").is(0).and("mode").is(1)),
                group("belong").push("$$ROOT").as("block")
        );
        AggregationResults<BlockDTO> aggregationResults = mongoTemplate.aggregate(agg,"blockDTO", BlockDTO.class);
        ArrayList arrayList = (ArrayList) aggregationResults.getRawResults().get("results");
        return ResponseData.ok().setData(arrayList);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值