1 前言
普元EOS内置了一系列数据库的操作类,本文介绍其中的一个类 CriteriaEntity的使用方法。
CriteriaEntity是进行组织数据库查询条件的类,基于该类配合DataObject,实现对数据库的查询。
2 CriteriaType类的实例化
要利用Criteria进行查询,先要实例化CriterialType类。
实例化代码如下:
import com.eos.das.entity.criteria.CriteriaType;
import com.eos.spring.dao.CriteriaBuilder;
CriteriaBuilder cbuild1 = new CriteriaBuilder( 实体名称 );
参数实体名称,是普元EOS创建的数据实体的名字,关于EOS的数据实体的概念可以看《普元EOS-数据实体、SDO接口和实现类、DataObject都是什么?》,可以理解为图形化的Entity类,在MyBatis中也有Entity类的。
3 根据 field = value 的条件查询
在查询数据库的时候,会有类似下面的sql语句
select * from t_user_devops where afc_user_id = '1'
数据表是 t_user_devops ,查询条件是 afc_user_id 字段值等于1
利用criteria查询代码如下
CriteriaBuilder cbuild1 = new CriteriaBuilder( TUserDevops.QNAME );
cbuild1.eq("afcUserId", "1");
CriteriaType ct1 = cbuild1.build();
TUserDevops dd2 = DatabaseDao.getInstance(数据源名称)
.<TUserDevops>getEntityByCriteria(ct1);
简单解释一下:
基于CriteriaBuilder类构件查询条件,最后build生成 CriteriaType对象,然后利用DatabaseDao的getEntityByCriteria 方法查询返回的结果。
CriteriaBuilder初始化的时候,要传递参数 entityName,即数据实体的名称,EOS的数据实体有一个完整的名字,类似:
com.primeton.eos.KgptDemo.model.kgptdemo.UserDataset.TUserDevops
这个字符串,在SDO接口的QNAME 字段中定义了,代码如下:
public interface TUserDevops extends DataObject {
public String QNAME = "com.primeton.eos.KgptDemo.model.kgptdemo.UserDataset.TUserDevops";
public Type TYPE = TypeHelper.INSTANCE.getType("com.primeton.eos.KgptDemo.model.kgptdemo.UserDataset", "TUserDevops");
eq方法:等于( = )方法,参数是字段名和字段值。 eq("afcUserId", "1")等同于SQL语句中的 where afc_user_id = '1' 。 这里注意,第一个参数是数据实体的字段名,而不是数据表的字段名。
build方法:该方法生成CriteriaType对象。
DatabaseDao.getInstance(数据源名称):这个方法实例化了DatabaseDao。参数数据源名称对应user-config.xml中定义的数据源名称。可以不填,不填写的话就是采用默认的default数据。
<TUserDevops>getEntityByCriteria方法:该方法根据条件查询一条数据。泛型语法决定了返回的类型是TUserDevops的。
写在最后
Criteria的使用技巧,我会不断完善到这个文章中。