【Spring Data】MongoTemplate 分页、排序、动态条件查询

实体类

public class Student implements Serializable {
	// id
    private String id;
    // 姓名
    private String name;
   	// 创建时间
    private String createTime;
}

查询、分页、排序实现

import org.springframework.data.domain.*;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;


@Component
public class OperationLogServiceImpl implements OperationLogService {

    @Autowired
    private MongoTemplate mongoTemplate;

    private static final String LIKE_PREFIX = "^.*";
    private static final String LIKE_SUFFIX = ".*$";

	/**
     * 查询
     *
     * @param num 第几页
     * @param pageSize 每页多少条
     * @return
     */
    @Override
    public PageResult<OperationLogVo> vehicleOperationLogList(int num, int pageSize) {
        Query mongoQuery = new Query();
        final OperationLogConditionPocondition = po.getCondition();
        
        /*
            下面的这些条件去自己需要的即可
         */

        // 查询名字叫做 张三 的数据
        mongoQuery.addCriteria(Criteria.where("name").is("张三"));
        
		// 模糊查询名字中带有 三 的数据
		Pattern pattern = Pattern.compile(LIKE_PREFIX + "三" + LIKE_SUFFIX, Pattern.CASE_INSENSITIVE);
        mongoQuery.addCriteria(Criteria.where("name").regex(pattern));
        
        // 下面两个单独查询时间的不能组合使用
		// 单独查询创建时间大于 2022-01-01 00:00:00 的数据
		mongoQuery.addCriteria(Criteria.where("createTime").gt("2022-01-01 00:00:00"));
		// 单独查询创建时间小于 2022-12-31 23:59:59 的数据
		mongoQuery.addCriteria(Criteria.where("createTime").lt("2022-12-31 23:59:59"));

		// 查询时间范围
		Criteria criteria = new Criteria();
        criteria.and("date_time").gte("2022-01-01 00:00:00").lte("2022-12-31 23:59:59");
        mongoQuery.addCriteria(criteria);

        // 查询总条数
        final long count = mongoTemplate.count(mongoQuery, PlotOperationLogEntity.class);
        // 设置分页和排序
        this.setPageableAndSort(mongoQuery, po.getNum(), po.getPageSize());
        // 查询【mongoTemplate.find 第一个参数是Query, 第二个参数是你查询的哪张表】
        final List<OperationLogVo> list = mongoTemplate.find(mongoQuery, OperationLogVo.class);

        PageResult<VehicleOperationLogVo> pageResult = new PageResult<>();
        // 查询到的数据数量
        pageResult.setCount((long) list.size());
        // 总页数
        pageResult.setTotal(calcTotalPage(count, po.getPageSize()));
        // 查询到的数据列表
        pageResult.setList(list);
        return pageResult;
    }

    /**
     * 计算总页数
     *
     * @param totalCount 总条数
     * @param pageSize 每页多少条
     * @return
     */
    private static long calcTotalPage(long totalCount, int pageSize) {
        return totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
    }

    /**
     * 分页、排序
     * 
     * @param mongoQuery
     * @param num 第几页
     * @param pageSize 每页多少条
     */
    private void setPageableAndSort(Query mongoQuery, long num, int pageSize){
    	// 倒序排序
        Sort sort = Sort.by(Sort.Direction.DESC, "createTime");
        // 分页
        Pageable pageable = org.springframework.data.domain.PageRequest.of(Math.toIntExact(num - 1), pageSize);
        mongoQuery.with(pageable);
        mongoQuery.with(sort);
    }

}




End


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Data MongoDB是一个用于与MongoDB数据库进行交互的框架。它提供了一个简化和高效的方式来访问和操作MongoDB数据库,并使开发人员能够更容易地使用Spring框架来开发MongoDB应用程序。 Spring Data MongoDB的核心组件是MongoTemplate,它是一个线程安全的MongoDB操作模板类。通过MongoTemplate,我们可以进行诸如查询、插入、更新和删除等常见的数据库操作。 使用MongoTemplate,我们可以使用MongoDB的查询语言来进行数据库查询。通过构建一个查询对象,我们可以指定要查询的集合、查询条件排序等。除了基本的查询外,MongoTemplate还提供了一些更高级的查询方法,如聚合查询分页查询和地理位置查询等。 对于插入、更新和删除操作,MongoTemplate提供了各种方法来执行这些操作。我们可以使用save()方法来插入或更新一个文档,使用delete()方法来删除一个或多个文档,并使用update()方法来更新一个或多个文档的值。 除了基本的操作外,MongoTemplate还提供了一些其他功能,如文档映射、索引管理和事务支持等。我们可以通过配置注解来定义文档和集合之间的映射关系,通过索引注解来定义索引,以提高查询性能。此外,Spring Data MongoDB还提供了对事务管理的支持,以确保在多个操作之间的一致性。 总之,Spring Data MongoDB是一个强大而灵活的框架,它为开发人员提供了一套简化和高效的API,用于与MongoDB数据库进行交互。通过MongoTemplate,我们可以轻松地进行查询、插入、更新和删除等常见的数据库操作,并享受到Spring框架的许多好处。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值