SpringBoot整合MongoDB完成增删改查分页查询方式

 更新时间:2025年11月14日 09:18:48   作者:今晚我一个人  
本文介绍了如何在SpringBoot中整合MongoDB,包括依赖导入、连接配置、实体类创建、增删改查、分页查询、时间范围查询以及基本操作的调试

SpringBoot整合MongoDB完成增删改查分页查询

mongodb的依赖导入以及连接配置请自行配置,此文档环境已经搭建完成。

一,SpringBoot整合MongoDB准备工作

1,首先要有mongodb的Document对应的实体类,标注@Document注解

//collection="zt_message_carousel"即为mongodb库中的文档名字
@Document(collection="zt_message_carousel")
public class CarouselInfo {
    //创建索引
    @Indexed(unique = true)
    @Id
    private String id;
    private String type;
    private String title;
    private String clickUrl;
    private String photoUrl;
    private Integer platformId;
    private String systemId;
    private Integer sort;
    private int state;
    private String creator;
    private Date createTime;
    private Date updateTime;
}

二,SpringBoot整合MongoDB完成添加操作

//添加操作比较简单,创建对象,设置参数,调用api即可
        CarouselInfo info = new CarouselInfo();
        //设置参数
        info.setId(UUIDUtil.getUuid());
        info.setSystemId(params.getSystemId());
        info.setPlatformId(params.getPlatformId());
        info.setTitle(params.getTitle());
        info.setType(params.getType());
        info.setClickUrl(params.getClickUrl());
        info.setCreator(params.getCreator());
        info.setPhotoUrl(params.getPhotoUrl());
        info.setCreateTime(new Date());
        //调用方法,完成添加,并返回添加成功的数据
        CarouselInfo carouselInfo = mongoTemplate.save(info);

三,SpringBoot整合MongoDB完成删除操作

		//创建查询
		Query query = new Query();
		//设置条件
        Criteria criteria = new Criteria();
        List<String> list = Arrays.asList(ids.split(","));
        criteria.and("systemId").is(systemId);
        criteria.and("platformId").is(platformId);
        //这里用的是in,也可以是ID,删除一条,灵活使用
        criteria.and("id").in(list);
        query.addCriteria(criteria);
        //调用方法,DeleteResult中可以获取到删除的条数
        DeleteResult remove = mongoTemplate.remove(query, CarouselInfo.class);

四,SpringBoot整合MongoDB完成修改操作

		//创建查询,主要是用来定位要修改的对象
		Query query = new Query();
        Criteria criteria = new Criteria();
        criteria.and("systemId").is(params.getSystemId()).and("platformId").is(params.getPlatformId()).and("id").is(params.getId());
        query.addCriteria(criteria);
        //创建Update,修改设置,给查询到的对象,对应的字段设置新值,和sql异曲同工
        Update update = new Update().set("title", params.getTitle()).set("type", params.getType()).set("photoUrl", params.getPhotoUrl()).set("updateTime",new Date());
        //执行修改操作,返回修改成功的条数
        UpdateResult res = mongoTemplate.updateFirst(query, update, CarouselInfo.class);

五,SpringBoot整合MongoDB完成查询操作

//这里是把查询条件写在了方法内,也可提取出来,也可以使用find()方法,返回的就是一个List集合
CarouselInfo info = mongoTemplate.findOne(new Query(Criteria.where("systemId").is(systemId).and("platformId").is(platformId).and("id").is(id)), CarouselInfo.class);

六,SpringBoot整合MongoDB完成分页查询操作

		//创建查询,查出此条件下,总记录数
		Query query = new Query();
        Criteria criteria = new Criteria();
        criteria.and("systemId").is(params.getSystemId());
        criteria.and("platformId").is(params.getPlatformId());
        if (StringUtils.isNotBlank(params.getTitle())) {
            criteria.and("title").is(params.getTitle());
        }
        if (StringUtils.isNotBlank(params.getType())) {
            criteria.and("type").is(params.getType());
        }
        if (params.getState() != null) {
            criteria.and("state").is(params.getState());
        }
        query.addCriteria(criteria);
        int count = mongoTemplate.find(query, CarouselInfo.class).size();
        
        // 分页查询
        params.setCurPage(params.getCurPage() == null ? PageParameter.DEFAULT_CURR_PAGE : params.getCurPage());
        params.setPageSize(params.getPageSize() == null ? PageParameter.DEFAULT_PAGE_SIZE : params.getPageSize());
        //此处为第几页,从第几条开始查,公式和sql一样,根据业务自行设置
        query.skip((params.getCurPage() - 1) * params.getPageSize());
        //每页条数
        query.limit(params.getPageSize());
        //调用find(),查出符合条件的数据
        List<CarouselInfo> carouselInfos = mongoTemplate.find(query, CarouselInfo.class);

七,SpringBoot整合MongoDB完成时间范围查询操作

因为mongodb存储的时间和我们系统的时间不一样,所以需要进行时区的更改

	//日期类型的,用gte和lte比较即可,且where条件只应出现一次,所以根据业务书写自己的逻辑即可
    query.addCriteria(Criteria.where("createTime").gte(dateToISODate(new Date(beginTime + 8*60*60*1000))).lte(dateToISODate(new Date(endTime + 8*60*60*1000))));
    /**
     * 将时间戳转化为mongodb中的ISODate时间类型数据
     * @param   dateStr Date类型时间戳
     * @return  parse   ISODate时间
     */
    public static Date dateToISODate(Date dateStr) {
        Date parse = null;
        try {
            // 解析出字符串时间
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
            parse = format.parse(format.format(dateStr));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return parse;
    }

SpringBoot整合mongodb完成基本的增删改查操作,根据需要,自行调试,完活收工。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 使用foreach遍历集合元素的实例

    java 使用foreach遍历集合元素的实例

    这篇文章主要介绍了java 使用foreach遍历集合元素的实例的相关资料,这里提供实例帮助大家理解如何使用foreach 进行遍历,希望能帮助到大家,
    2017-08-08
  • 如何解决Maven出现Could not find artifact的问题

    如何解决Maven出现Could not find artifact的问题

    这篇文章主要介绍了如何解决Maven出现Could not find artifact的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Spring源码如何修改Bean的属性用到的相关类

    Spring源码如何修改Bean的属性用到的相关类

    这篇文章主要介绍了Spring源码如何修改Bean的属性用到的相关类,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 一篇文章带你入门java多线程

    一篇文章带你入门java多线程

    这篇文章主要介绍了java多线程编程实例,分享了几则多线程的实例代码,具有一定参考价值,加深多线程编程的理解还是很有帮助的,需要的朋友可以参考下
    2021-08-08
  • Spring Security 在 Spring Boot 中的使用详解【集中式】

    Spring Security 在 Spring Boot 中的使用详解【集中式】

    这篇文章主要介绍了Spring Security 在 Spring Boot 中的使用【集中式】,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • springboot之SpringApplication生命周期和事件机制解读

    springboot之SpringApplication生命周期和事件机制解读

    这篇文章主要介绍了springboot之SpringApplication生命周期和事件机制,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Spring IOC (DI) 依赖注入的四种方式示例详解

    Spring IOC (DI) 依赖注入的四种方式示例详解

    这篇文章主要介绍了Spring IOC (DI) 依赖注入的四种方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • 使用注解@Recover优化丑陋的循环详解

    使用注解@Recover优化丑陋的循环详解

    我们知道在实现一个功能的时候是可以使用不同的代码来实现的,那么相应的不同实现方法的性能肯定也是有差别的,下面这篇文章主要给大家介绍了关于使用注解@Recover优化丑陋的循环的相关资料,需要的朋友可以参考下
    2022-04-04
  • IDEA中java断言assert语法及使用

    IDEA中java断言assert语法及使用

    这篇文章主要介绍了IDEA中java断言assert语法详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Eclipse中安装反编译工具Fernflower的方法(Enhanced Class Decompiler)

    Eclipse中安装反编译工具Fernflower的方法(Enhanced Class Decompiler)

    这篇文章主要介绍了Eclipse中安装反编译工具Fernflower的方法(Enhanced Class Decompiler),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论