springBoot+mongoDB项目中,使用MongoFactory、MongoTemplate分页条件查询,增删查改

MongoDB:CRUD

只展示实现类代码

添加

java 复制代码
    @Autowired
    private MongoTemplate mongoTemplate;
    @Autowired
    private MongoFactory mongoFactory;

@Override
    public boolean saveEntity(entityForm form) {
        try {
            实体类 en = new 实体类();
            en.setName(form.getName);
            // ... 
            实体类 save = mongoTemplate.save(en);
            return Objects.nonNull(save.get_id());
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }

底下的就给关键代码了,w太懒了。。。

删除

java 复制代码
            Query query = new Query(Criteria.where("条件字段名称例如_id").is(id));//id是传进来的条件

            DeleteResult remove = mongoTemplate.remove(query, 实体类.class);

            return remove.getDeletedCount() > 0; //返回删除条数

修改

java 复制代码
Query query = new Query();// 添加修改表条件为id=id
query.addCriteria(Criteria.where("主键id字段名").is(id));

Update update = new Update(); // 设置需要修改的字段
	update.set("字段名",新值);
	// 等等... 

//返回修改结果
UpdateResult updateResult = mongoTemplate.updateFirst(query, update, 实体类.class);
//updateResult.getModifiedCount()可以获得成功修改条数

条件查询

java 复制代码
@Override
    public List<实体类> getHbzbGudongList(条件实体类 search) {// 目前只有一个关键字字段(keywords) 可以添加多个
        Query query = new Query();
        if (Objects.nonNull(search.getKeywords())) {
            Pattern pattern = Pattern.compile("^.*" + search.getKeywords() + ".*$");
            query.addCriteria( // orOperator == 或者。里面俩条件关系是or,还有andOperator顾名思义等于数据库中的and 
                    new Criteria().orOperator( 
                            Criteria.where(条件字段名1).is(pattern),
                            Criteria.where(条件字段名2).is(pattern)
                    )
            );
        }
        List<实体类> ls= mongoTemplate.find(query, 实体类.class);
        return ls;
    }

这玩意百度了好久用什么聚合查询 老是会报错什么的,导包也导不进,只能用底下发方法实现了

分页条件查询

java 复制代码
    private Integer type;
    private String keywords;

-----------------上面是orderQuery 类的内容,可以自定义



import org.springframework.*; //几乎包都在这下面,我懒得一个个复制出来了,别用*
	/**
     * 分页条件查询   //页码也可以不传,只要让orderQuery类继承一个基础分页对象就行
     * @param pageNum 页码
     * @param pageSize 条数
     * @param order 查询条件
     * @return 返回分页列表
     */
    @Override
    public Page<实体类> getOrderPage(Integer pageNum, Integer pageSize, orderQuery order) {
        Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
        MongoTemplate mongoTemplate = mongoFactory.mongoTemplate("数据库名");
        Query query = new Query();
        // 判断条件类型
        if (Objects.nonNull(order.getType()) && Objects.nonNull(order.getKeywords())) {
            Integer type = order.getType();
            switch (type) { // 查询类型:{0:订单号,1:商家名称,2:商品名称}
                case 0 ->
                        query.addCriteria("字段名1").is(order.getKeywords()));
                case 1 ->
                        query.addCriteria("字段名2").is(order.getKeywords()));
                case 2 ->
                        query.addCriteria("字段名3").is(order.getKeywords()));
            }
        }
        long total = mongoTemplate.count(query, 实体类.class);
            List<实体类> orderPageVOS = mongoTemplate.find(query.with(pageable), 实体类.class);
        return new PageImpl<>(orderPageVOS, pageable, total);
    }
相关推荐
屋外雨大,惊蛰出没19 分钟前
深入浅出Spring Boot
java·spring boot·ioc·aop
协享科技1 小时前
Spring Boot 与 Go 双服务架构实践:从单体拆分到通信设计
java·人工智能·spring boot·后端·架构·golang·ai编程
小林敲代码77883 小时前
记录一下IDEA中很多变量变色的方案
java·开发语言·spring boot·idea
Flittly3 小时前
【AgentScope Java新手村系列】(3)工具系统
java·spring boot·spring
Flittly4 小时前
【AgentScope Java新手村系列】(2)第一个Agent-基础对话
java·spring boot·spring·ai
小二·4 小时前
Spring Boot 3 + Vue 3 全栈开发实战
vue.js·spring boot·后端
码农飞哥5 小时前
Spring Boot 多角色权限隔离实战:接口层+路由层+UI层三层防御,杜绝生产数据泄露
spring boot·状态模式·架构设计·系统设计·权限控制
SuperArc19995 小时前
SpringBoot+Slf4j+Log4j2+mybatis 日志整合
spring boot·mybatis·log4j2·slf4j·日志整合
lfwh6 小时前
探针程序技术解析:基于 Spring Boot 非 Web 模式的云服务监控告警系统
前端·spring boot·后端
sevenll076 小时前
DocKit agentic MongoDB GUI 客户端 - 用自然语言和你的数据对话
数据库·mongodb·nosql·agent·桌面客户端