Criteria联合分组查询+bject转对象,java实现Object转实体类备忘录

Criteria分组查询,拿到的结果集中只有id,recordDate,device_id三个值:

Criteria crit = deviceRecordDao.getSession().createCriteria(DeviceRecord.class);
ProjectionList proList = Projections.projectionList();

        crit.setFetchMode("device", FetchMode.JOIN);
        crit.setFetchMode("deviceRecord", FetchMode.JOIN);
        crit.createAlias("device", "device");
        crit.createAlias("device.office", "office");
        crit.add(dataScopeFilter(user, "office", "", true));

        crit.add(Restrictions.eq(DeviceRecord.FIELD_DEL_FLAG, DeviceRecord.DEL_FLAG_NORMAL));
        crit.add(Restrictions.eq("device.delFlag", DeviceRecord.DEL_FLAG_NORMAL));
        crit.addOrder(Order.desc("recordDate"));

        proList.add(Projections.id());
        proList.add(Projections.max("recordDate")); 
        proList.add(Projections.groupProperty("device.id"));
        crit.setProjection(proList); 

        List results = crit.list();  

results返回的是一个Object类型,要把它转换成相应的实体类:

List<DeviceRecord> topicList2 = Lists.newArrayList();  

        for(int i=0;i<results.size();i++){
            DeviceRecord dr = new DeviceRecord();
            Object[] obj = (Object[]) results.get(i);
            dr.setId(obj[0].toString());
            topicList2.add(dr);
        }
        return topicList2;

完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设我们有一个实体类 `Order`,其中包含一个 `Date` 类型的字段 `createDate`,我们希望根据这个字段每周来实现分页,可以按照以下步骤进行: 1. 定义一个分页查询的方法,该方法接受两个参数:页码和每页记录数。 ```java public List<Order> findByPage(int pageNum, int pageSize) { // TODO: 实现分页查询逻辑 } ``` 2. 在方法中,使用 `Calendar` 类获取当前日期,并将它设置为每周的第一天(默认是周日)。 ```java Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); ``` 3. 计算出当前页的起始日期和结束日期。假设当前页码为 `pageNum`,每页记录数为 `pageSize`,则起始日期为当前日期往前推 `(pageNum - 1) * pageSize` 天,结束日期为起始日期往后推 `pageSize - 1` 天。 ```java cal.add(Calendar.DATE, -(pageNum - 1) * pageSize); Date startDate = cal.getTime(); cal.add(Calendar.DATE, pageSize - 1); Date endDate = cal.getTime(); ``` 4. 使用 `startDate` 和 `endDate` 构造查询条件,进行分页查询。 ```java Criteria criteria = new Criteria(); criteria.andBetween("createDate", startDate, endDate); PageRequest pageRequest = PageRequest.of(pageNum - 1, pageSize); List<Order> orders = mongoTemplate.find(new Query(criteria).with(pageRequest), Order.class); return orders; ``` 完整代码如下: ```java public List<Order> findByPage(int pageNum, int pageSize) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); cal.add(Calendar.DATE, -(pageNum - 1) * pageSize); Date startDate = cal.getTime(); cal.add(Calendar.DATE, pageSize - 1); Date endDate = cal.getTime(); Criteria criteria = new Criteria(); criteria.andBetween("createDate", startDate, endDate); PageRequest pageRequest = PageRequest.of(pageNum - 1, pageSize); List<Order> orders = mongoTemplate.find(new Query(criteria).with(pageRequest), Order.class); return orders; } ``` 这样,我们就可以根据实体类中日期字段每周来实现分页了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值