Dorado 7 : 5.3.3.2 准备后台服务

步骤1:我们在EmployeeService类中增加新方法getAllForFilter,增加后全部代码如下:

package com.bstek.dorado.sample.standardlesson.service;
import java.util.Collection;
import javax.annotation.Resource;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.stereotype.Component;
import com.bstek.dorado.annotation.DataProvider;
import com.bstek.dorado.data.provider.Criteria;
import com.bstek.dorado.data.provider.Page;
import com.bstek.dorado.hibernate.HibernateUtils;
import com.bstek.dorado.sample.standardlesson.dao.SlEmployeeDao;
import com.bstek.dorado.sample.standardlesson.entity.SlEmployee;
@Component
public class EmployeeService {
    @Resource
    private SlEmployeeDao slEmployeeDao;
    
    @DataProvider
    public Collection<SlEmployee> getAll(){
        return slEmployeeDao.getAll();
    }
    
    @DataProvider
    public void getAllForPage(Page<SlEmployee> page){
        slEmployeeDao.getAll(page);
    }
    
    @DataProvider
    public void getAllForFilter(Page<SlEmployee> page, Criteria criteria) throws Exception{
        DetachedCriteria detachedCriteria = DetachedCriteria.forClass(SlEmployee.class);
        if (criteria != null){
            slEmployeeDao.find(page, HibernateUtils.createFilter(detachedCriteria, criteria));
        }else{
            slEmployeeDao.getAll(page);
        }
    }
}

我们发现getAllForFilter方法中新传入了criteria参数,Criteria对象 (com.bstek.dorado.data.provider.Criteria),这是Provider提供的一个封装对象,用于描述Grid中过滤栏中的查询条件。通过传入查询条件组装查询语句,最终获得查询结果。我们可以通过在代码中打断点验证这一点,我们在方法的第一句上打上断点:

接下来我们运行页面,首先使【系统Id】字段包含an,接下来使【员工编号】字段结尾包含1:

回车后进入方法断点处:

criteria参数是Provider提供的一个封装对象,用于描述Grid中过滤栏中的查询条件,由于Grid中通常都有多个列,如果在多个列中都输入值,则我们可以通过其criteria对象的criterions集合获取多个查询条件,并通过集合中的SingleValueFilterCriterion获取查询条件和值:

通过调试信息可以很清楚的了解其运行原理。

info

关于Criteria对象的说明,请参考 Server端数据过滤和排序

Attachments:

5.3.3.2-1.png (image/png)
5.3.3.2-2.png (image/png)
5.3.3.2-3.png (image/png)
5.3.3.2-4.png (image/png)