# 查询实体支持多数据库

查询实体 :通过定义一句查询的sql语句或一个数据库的视图来指明数据是如何获取的,并且设置获取后的数据如何和一个实体做映射,则这个实体就被称作查询实体。

查询实体用于映射的属性都是简单属性。

可以对不同类型的数据库指定查询的sql语句或视图名称,因为每种数据库的sql语法有差异,并且也不是每种数据库都支持视图;但是必须指定一个default类型的配置,因为EOS6在程序运行时根据数据库连接自动判断判断数据库类型,然后根据对该种类型的数据库配置来获取数据,如果没有找到对该数据库的配置,则会使用default类型的配置。

查询实体的定义界面如下 查询实体界面

可以对不同类型的数据库设置查询方式(sql或view),写上查询语句,实体名称,选好数据源,然后点击映射属性,就会在下面的反射属性里生成属性和列的映射。以后使用该查询实体查询时,数据库记录就会按照设置的映射关系,把列的值放入到对应的属性里。

# 相关约束

  • 查询实体里不能定义属性名叫id的属性(唯一标识对应的属性可以使用id这个名称),id是保留关键字;
  • 同一数据集中查询实体名称具有唯一性;
  • 查询实体只能用于查询,不可以对其执行增删改的操作;
  • 如果指定的查询sql语句或视图中有2个相同的列名,需要起不同的别名来区分。

# 注意

查询实体允许用户通过指定某一列或几列的值来做为查询实体的唯一标识。 如果用户没有指定,EOS6会自动使用一个常量来作为该查询实体唯一标识。 但是如果用默认的唯一标识,就不能使用持久化实体和该查询实体做单向1:1关联和单向N:1关联,否则对持久化实体做操作会抛异常。

# 简单示例

可以使用com.eos.das.entity.IDASSession的接口对查询实体进行查询操作。关于接口方法的介绍可以参见接口及方法说明 (opens new window)

查询实体的定义如下图所示,该实体的全名是com.eos.UserQueryEnity。 img

//TODO:getConnection();
//创建IDASSession,用于操作实体
IDASSession session = DASManager.createDasSession(connection);
//创建一个IDASCriteria,指明对哪个实体操作,用于查询
IDASCriteria criteria =
        DASManager.createCriteria("com.eos.UserQueryEnity");
//增加一个查询条件 User.userId = '0001'
criteria.add(ExpressionHelper.eq("userId","0001"));
//查询出一个UserQueryEntity对象,
DataObject userQueryEntity = session.queryEntity(criteria);
session.close();
//TODO:closeConnection();

com.eos.UserQueryEntity是通过"select * from EOS_USER"这句sql定义的。 上面代码实际上等于执行了这样的查询"select * from (select * from EOS_USER) t where t.USERID='0001'"。

# 注意

由于Informix数据库本身不支持SQL方式,所以在使用Informix时需要将查询方式设置为View。如下图所示: img

上次更新: 2023/7/20下午12:25:28