# com.eos.foundation.database.DatabaseExt

# 构件包说明

本工具类实现了对数据的扩展操作。

# 运算逻辑构件使用说明

该构件包包含以下构件:

序号 方法 功能描述
1 commonQueryWithPage(String dsName, DataObject criteria, Object pagecond) 通用分页查询
2 countByNamedSql(String dsName, String nameSqlId, Object parameterObject) 根据命名SQL语句统计查询结果总记录数
3 deleteEntityCascade(String dsName, DataObject entity) 级联方式删除一条记录
4 executeNamedSql(String dsName, String nameSqlId, Object parameterObject) 执行命名SQL语句
5 executeNamedSqlBatch(String dsName, String nameSqlId, Object[] parameterObject) 批量执行命名SQL语句
6 fillCodeDesc(String dsName, DataObject[] entities, String propertyName, String codeEntityName, String associationPropertyName, String codeEntityPropertyNames, String entityPropertyNames) 从CodeEntity中获取描述放入entities中指定的属性里
7 generateWhereSql(String dsName, DataObject criteriaDataObject) 根据criteriaDataObject生成where语句
8 getNextSequence(String name) 根据名称获得序列号值
9 getPrimaryKey(DataObject entity) 获取持久化实体主键的序列号的值
10 getTableName(String dsName, String entityName) 获取持久化实体对应的表名
11 insertEntityCascade(String dsName, DataObject entity) 级联方式新增一条记录
12 lockEntity(String dsName, DataObject dataObject) 根据主键锁定一条记录
13 queryByNamedSql(String dsName, String nameSqlId, Object parameterObject) 根据命名SQL语句进行分页查询
14 queryByNamedSql(String dsName, String nameSqlId, int begin, int length, Object parameterObject) 根据命名SQL语句进行查询
15 queryByNamedSqlWithPage(String dsName, String nameSqlId, DataObject pageCond, Object parameterObject) 根据命名SQL语句进行分页查询
16 queryEntitiesByCriteriaEntityWithPage(String dsName, DataObject criteriaEntity, DataObject pagecond) 根据查询条件实体分页查询,根据查询条件实体指定查询Entity的字段
17 queryEntitiesByTemplateWithPage(String dsName, DataObject template, DataObject pagecond) 根据SDO数据模板查询条件分页查询,会查询Entity的所有字段
18 setSequenceValue(String name, long value) 把某个序列号对应的sequence强制设置为value值
19 updateEntityCascade(String dsName, DataObject entity, String... property) 级联方式更新一条记录

# commonQueryWithPage:通用分页查询

# 【功能说明】

使用criteria/template查询条件的通用分页查询。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.commonQueryWithPage,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 criteria DataObject 查询条件实体或者SDO数据查询模板
参数 pagecond Object 分页条件
返回值 out0 DataObject[] 符合查询模板的所有结果
  1. 抛出异常说明 查询失败抛出异常com.eos.system.exception.EOSRuntimeException。

  2. 规则说明 关于查询条件实体的说明请参考《EOS基础参考手册》中的"数据服务\CriteriaEntity"。

# 【参考案例】

示例:利用查询条件实体对CUST表进行分页查询。

  • 场景描述 根据CUSTID字段分页查询CUST表记录。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 criteria DataObject criteria 变量 传引用
参数 pageCond Object pageCond 变量 传引用
返回值 out0 DataObject[] result 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为查询条件实体criteria
    • 第三个参数为分页条件,分页对象pageCond
    • 返回值为符合查询条件的所有结果,即CUST数组。
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <criteria __id="1" __type="sdo:com.primeton.das.criteria.criteriaType">
            <_entity __type="java:java.lang.String">
                com.primeton.eos.foundation.example.data.CUST
            </_entity>
            <_select/>
            <_expr __id="3" __type="java:com.primeton.ext.data.sdo.collection.ContainerAwareList">
                <__entry __id="4" __index="0" __type="sdo:com.primeton.das.criteria.exprType">
                    <_op __type="java:java.lang.String">in</_op>
                    <_min/>
                    <_max/>
                    <_likeRule/>
                    <_dateRule/>
                    <_pattern/>
                    <_year/>
                    <_quarter/>
                    <_month/>
                    <_opProperty/>
                    <_ref/>
                    <_processNullValue/>
                    <CUSTID __type="java:java.lang.String">2,3</CUSTID>
                </__entry>
            </_expr>
            <_and __collection="list"/>
            <_or __collection="list"/>
            <_not __collection="list"/>
            <_order __collection="list"/>
            <_orderby __collection="list"/>
            <_group/>
            <_distinct/>
            <_association __collection="list"/>
            <_ref __collection="list"/>
            <_lock/>
        </criteria>
        <pageCond __id="2" __type="sdo:com.eos.foundation.PageCond">
            <begin/>
            <length/>
            <count __type="java:java.lang.Integer">0</count>
            <totalPage/>
            <currentPage/>
            <isCount __type="java:java.lang.Boolean">true</isCount>
            <isFirst/>
            <isLast/>
            <size/>
        </pageCond>
    </__root>
</bizContext>
  • 等效的SQL语句 以oracle为例:
select * from
  ( select row_.*, rownum rownum_ from
      ( select CUSTID, CUSTCODE, CUSTNAME, BIRTH, SEX, ADDRESS from CUST where CUSTID in (2,3) ) row_
    where rownum <= 10
  )
where rownum_ > 1
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <criteria __id="1" __type="sdo:com.primeton.das.criteria.criteriaType">
            <_entity __type="java:java.lang.String">
                com.primeton.eos.foundation.example.data.CUST
            </_entity>
            <_select/>
            <_expr __id="4" __type="java:com.primeton.ext.data.sdo.collection.ContainerAwareList">
                <__entry __id="7" __index="0" __type="sdo:com.primeton.das.criteria.exprType">
                    <_op __type="java:java.lang.String">in</_op>
                    <_min/>
                    <_max/>
                    <_likeRule/>
                    <_dateRule/>
                    <_pattern/>
                    <_year/>
                    <_quarter/>
                    <_month/>
                    <_opProperty/>
                    <_ref/>
                    <_processNullValue/>
                    <CUSTID __type="java:java.lang.String">2,3</CUSTID>
                </__entry>
            </_expr>
            <_and __collection="list"/>
            <_or __collection="list"/>
            <_not __collection="list"/>
            <_order __collection="list"/>
            <_orderby __collection="list"/>
            <_group/>
            <_distinct/>
            <_association __collection="list"/>
            <_ref __collection="list"/>
            <_lock/>
        </criteria>
        <pageCond __id="2" __type="sdo:com.eos.foundation.PageCond">
            <begin __type="java:java.lang.Integer">0</begin>
            <length __type="java:java.lang.Integer">10</length>
            <count __type="java:java.lang.Integer">2</count>
            <totalPage __type="java:java.lang.Integer">1</totalPage>
            <currentPage __type="java:java.lang.Integer">1</currentPage>
            <isCount __type="java:java.lang.Boolean">true</isCount>
            <isFirst __type="java:java.lang.Boolean">true</isFirst>
            <isLast __type="java:java.lang.Boolean">true</isLast>
            <size __type="java:java.lang.Integer">2</size>
        </pageCond>
        <result __id="3" __type="java:[Lcommonj.sdo.DataObject;">
            <__entry __componentType="java:commonj.sdo.DataObject" __id="5" __index="0"
             __type="sdo:com.primeton.eos.foundation.example.data.CUST">
                <CUSTID __type="java:java.lang.Integer">2</CUSTID>
                <CUSTCODE __type="java:java.lang.String">cust_2</CUSTCODE>
                <CUSTNAME __type="java:java.lang.String">cust_2</CUSTNAME>
                <BIRTH __type="java:java.sql.Date">2009-09-09</BIRTH>
                <SEX __isNullOrEmpty="null"/>
                <ADDRESS __isNullOrEmpty="null"/>
                <PHOTO/>
            </__entry>
            <__entry __id="6" __index="1" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
                <CUSTID __type="java:java.lang.Integer">3</CUSTID>
                <CUSTCODE __type="java:java.lang.String">cust_3</CUSTCODE>
                <CUSTNAME __type="java:java.lang.String">cust_3</CUSTNAME>
                <BIRTH __type="java:java.sql.Date">2009-09-09</BIRTH>
                <SEX __isNullOrEmpty="null"/>
                <ADDRESS __isNullOrEmpty="null"/>
                <PHOTO/>
            </__entry>
        </result>
    </__root>
</bizContext>

# countByNamedSql:根据命名SQL语句统计查询结果总记录数

# 【功能说明】

根据命名SQL语句统计查询结果总记录数。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.countByNamedSql,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 nameSqlId String 命名SQL的唯一标识
参数 parameterObject Object 命名SQL语句绑定的变量(可以是SDO,或者是一个HashMap,或者基本类型的值)
返回值 out0 int 行数
  1. 抛出异常说明 统计失败抛出异常com.eos.system.exception.EOSRuntimeException。

  2. 规则说明 关于命名SQL的说明请参考《EOS基础参考手册》中的"数据服务\命名SQL"。

# 【参考案例】

示例:根据命名SQl统计查询结果数。

  • 场景描述 根据命名SQL查询CUST表总记录数。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 nameSqlId String com.primeton.eos.foundation.example.namingsql.selectCusts 常量 传引用
参数 parameterObject Object queryCondition 变量 传引用
返回值 out0 int result 变量 传引用
  • 参数描述

    • 第一个参数为数据源,默认值default为项目数据源,一般不需要修改
    • 第二个参数为命名SQL的唯一标识(命名SQL名称)
    • 第三个参数为查询条件(SDO对象或是HashMap,或者基本类型的值)
    • 返回值为查询记录总条数(int类型)。
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <queryCondition __id="1" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID/>
            <CUSTCODE/>
            <CUSTNAME __type="java:java.lang.String">cust</CUSTNAME>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </queryCondition>
    </__root>
</bizContext>
  • 等效的SQL语句 以oracle为例:
select count( * ) from
(select CUSTID,CUSTCODE,CUSTNAME,BIRTH from CUST WHERE CUSTNAME like 'cust%')
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <queryCondition __id="1" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID/>
            <CUSTCODE/>
            <CUSTNAME __type="java:java.lang.String">cust</CUSTNAME>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </queryCondition>
        <result __type="java:java.lang.Integer">3</result>
    </__root>
</bizContext>

# deleteEntityCascade:级联方式删除一条记录

# 【功能说明】

级联方式删除一条记录(只支持单层聚合方式1->n的级联操作)。只删除聚合关系(1->n)的n端的子对象记录。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.deleteEntityCascade,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 entity DataObject 数据实体
  1. 抛出异常说明 无。

  2. 规则说明 无。

# 【参考案例】

示例:本例用来删除组织及其所拥有的操作员。

  • 场景描述 删除组织及其所拥有的操作员。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 entity DataObject org 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为数据实体(一对多的数据实体)
  • 其他说明 只支持单层聚合方式1->n的级联操作。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <org __id="1" __type="sdo:com.primeton.eos.foundation.example.data.O_ORG">
            <ORG_ID __type="java:java.lang.Long">5</ORG_ID>
            <PARENT_ORG_ID/>
            <ORG_NAME/>
            <ORG_CODE/>
            <ORG_ADDRESS/>
            <ORG_SEQ/>
            <O_OPERATORS __collection="list"/>
        </org>
    </__root>
</bizContext>
  • 等效的SQL语句
delete from O_OPERATOR where O_OPERATOR.ORG_ID=5
delete from O_ORG where ORG_ID=5
  • 调用后的bizContext 同调用前。

# executeNamedSql:执行命名SQL语句

# 【功能说明】

执行命名SQL语句,所有操作隶属于一个原子事务。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.executeNamedSql,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 nameSqlId String 命名SQL的唯一标识
参数 parameterObject Object 命名SQL语句绑定的变量(可以是SDO,或者是一个HashMap,或者基本类型的值)
  1. 抛出异常说明 执行失败抛出异常com.eos.system.exception.EOSRuntimeException。

  2. 规则说明 关于命名SQL的说明请参考《EOS基础参考手册》中的"数据服务\命名SQL"。

    警告

    如果传入的参数的值有null值,最好指定该参数的jdbcType属性。 关于如何指定参数的jdbcType属性请参见《EOS基础参考手册》中的"数据服务\命名SQL\Parameter的属性" 和"数据服务\命名SQL\Inline Parameter Map"。

# 【参考案例】

示例:利用命名SQL删除CUST表所有记录。

  • 场景描述 根据命名SQL删除CUST表所有记录。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 nameSqlId String com.primeton.eos.foundation.example.namingsql.deleteAllCusts 常量 传引用
参数 parameterObject Object null 表达式 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为命名SQL的唯一标识(命名SQL名称)
    • 第三个参数为更新条件(SDO对象或是HashMap,或者基本类型的值)
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __isNullOrEmpty="empty" __type="java:java.util.HashMap"/>
</bizContext>
  • 等效的SQL语句
delete from  CUST
  • 调用后的bizContext 同调用前。

# executeNamedSqlBatch:批量执行命名SQL语句

# 【功能说明】

批量执行命名SQL语句。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.executeNamedSqlBatch,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 nameSqlId String 命名SQL的唯一标识
参数 parameterObjects Object[] 命名SQL语句绑定的变量(可以是SDO,或者是一个HashMap,或者基本类型的值的数组)
返回值 out0 int 批处理影响的记录数说明当PreparedStatement.executeBatch()后返回一个int[], 而后会判断数组里的每个元素的值,如果值不等于Statement.SUCCESS_NO_INFO, 并且不等于 Statement.EXECUTE_FAILED,就会把这个值记入受影响的记录数; 如果有一个Statement.EXECUTE_FAILED,将会抛出异常。
  1. 抛出异常说明 执行失败抛出异常com.eos.system.exception.EOSRuntimeException。

  2. 规则说明 关于命名SQL的说明请参考《EOS基础参考手册》中的"数据服务\命名SQL"。

    警告 如果传入的参数的值有null值,最好指定该参数的jdbcType属性。 关于如何指定参数的jdbcType属性请参见《EOS基础参考手册》中的"数据服务\命名SQL\Parameter的属性" 和"数据服务\命名SQL\Inline Parameter Map"。

# 【参考案例】

示例:利用命名SQL新增多条CUST表记录。

  • 场景描述 利用命名SQL新增多条CUST表记录。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 nameSqlId String com.primeton.eos.foundation.example.namingsql.insertCust 常量 传引用
参数 parameterObjects Object[] custs 变量 传引用
返回值 out0 int result 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为命名SQL的唯一标识(命名SQL名称)
    • 第三个参数为更新条件(SDO对象或是HashMap,或者基本类型的值的数组)
    • 第四个返回值为批处理影响的记录数
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <custs __collection="array" __collectionid="1" __componentType="java:commonj.sdo.DataObject"
__id="2" __index="0" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID __type="java:java.lang.Integer">123</CUSTID>
            <CUSTCODE/>
            <CUSTNAME __type="java:java.lang.String">name1</CUSTNAME>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </custs>
        <custs __collection="array" __collectionid="1" __id="3" __index="1"
__type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID __type="java:java.lang.Integer">456</CUSTID>
            <CUSTCODE/>
            <CUSTNAME __type="java:java.lang.String">name2</CUSTNAME>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </custs>
    </__root>
</bizContext>
  • 等效的SQL语句
insert into  CUST (CUSTID,CUSTNAME,CUSTCODE) values (?,?,1)
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <result __type="java:java.lang.Integer">0</result>
        <custs __collection="array" __collectionid="1" __componentType="java:commonj.sdo.DataObject"
__id="2" __index="0" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID __type="java:java.lang.Integer">123</CUSTID>
            <CUSTCODE/>
            <CUSTNAME __type="java:java.lang.String">name1</CUSTNAME>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </custs>
        <custs __collection="array" __collectionid="1" __id="3" __index="1"
__type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID __type="java:java.lang.Integer">456</CUSTID>
            <CUSTCODE/>
            <CUSTNAME __type="java:java.lang.String">name2</CUSTNAME>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </custs>
    </__root>
</bizContext>

说明 这是在Oracle10上跑出的结果,批处理执行后(PreparedStatement.executeBatch())返回的int[]的每个元素值都是Statement.SUCCESS_NO_INFO, 所以受影响的总行数是0。

# fillCodeDesc:从CodeEntity中获取描述放入entities中指定的属性里

# 【功能说明】

从CodeEntity中获取描述放入entities中指定的属性里。该功能实际就是持久化实体的的查询,唯一不同的是,其结果是根据参数指定的属性,放入条件entities中,而不是直接返回DataObject数组。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.data.DatabaseExt.fillCodeDesc,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 entities DataObject[] 数据实体
参数 propertyName String 实体的属性名称,用于和CodeEntity的associationPropertyName做条件关联。注意propertyName和associationPropertyName都必须是实体的简单属性。
参数 codeEntityName String CodeEntity的全名(必须是持久化实体)
参数 associationPropertyName String CodeEntity的属性名称
参数 codeEntityPropertyNames String CodeEntity里存放描述的属性名称,多个名称之间可用","分割
参数 entityPropertyNames String CodeEntity中取出的描述需要放入实体的对应的属性名称。该值如果为null, 则使用codeEntityPropertyName。多个名称之间可用","分割
  1. 抛出异常说明

    • 参数codeEntityName、propertyName、associationPropertyName为null或空字符串时,抛出com.eos.system.exception.EOSRuntimeException异常;
    • 参数codeEntityPropertyName、entityPropertyName为null时,抛出com.eos.system.exception.EOSRuntimeException异常;
    • 参数codeEntityPropertyName、entityPropertyName用","分割以后的名称个数不匹配时(例如:codeEntityPropertyName="name,id,age", entityPropertyName="pName,pId"),抛出com.eos.system.exception.EOSRuntimeException异常。
  2. 规则说明 无。

# 【参考案例】

示例:本例操作员的名字来填充一个实体属性。

  • 场景描述: 无。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 entities DataObject[] results 变量 传引用
参数 propertyName String id 常量 传引用
参数 codeEntityName String com.primeton.eos.foundation.example.data.O_OPERATOR 常量 传引用
参数 associationPropertyName String OPERATOR_ID 常量 传引用
参数 codeEntityPropertyNames String USER_NAME 常量 传引用
参数 entityPropertyNames String name 常量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为数据实体
    • 第三个参数为实体属性名称,实体做条件关联的字段(id)
    • 第四个参数为要查询的实体全名(必须是持久化实体)
    • 第五个参数为业务字段类型项实体字段(OPERATOR_ID)
    • 第六个参数为业务字段类型实体字段(USER_NAME)
    • 第七个参数为放入实体的对应的属性名称(name)
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <results __id="1" __type="java:[Lcommonj.sdo.DataObject;">
            <__entry __componentType="java:commonj.sdo.DataObject" __id="2" __index="0"
             __type="sdo:com.primeton.das.datatype.AnyType">
                <id __type="java:java.lang.Long">1</id>
            </__entry>
            <__entry __id="3" __index="1" __type="sdo:com.primeton.das.datatype.AnyType">
                <id __type="java:java.lang.Long">2</id>
            </__entry>
            <__entry __id="4" __index="2" __type="sdo:com.primeton.das.datatype.AnyType">
                <id __type="java:java.lang.Long">3</id>
            </__entry>
        </results>
    </__root>
</bizContext>
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <results __id="1" __type="java:[Lcommonj.sdo.DataObject;">
            <__entry __componentType="java:commonj.sdo.DataObject" __id="2" __index="0"
             __type="sdo:com.primeton.das.datatype.AnyType">
                <id __type="java:java.lang.Long">1</id>
                <name __type="java:java.lang.String">opeartor_1</name>
            </__entry>
            <__entry __id="3" __index="1" __type="sdo:com.primeton.das.datatype.AnyType">
                <id __type="java:java.lang.Long">2</id>
                <name __type="java:java.lang.String">opeartor_2</name>
            </__entry>
            <__entry __id="4" __index="2" __type="sdo:com.primeton.das.datatype.AnyType">
                <id __type="java:java.lang.Long">3</id>
                <name __type="java:java.lang.String">opeartor_3</name>
            </__entry>
        </results>
    </__root>
</bizContext>

# generateWhereSql:根据criteriaDataObject生成where语句

# 【功能说明】

根据criteriaDataObject生成where语句。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.generateWhereSql,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName java.lang.String 数据源名称,例如"default"
参数 criteriaDataObject commonj.sdo.DataObject criteria的DataObject
返回值 java.lang.String 生成的where语句
  1. 抛出异常说明 当参数criteriaDataObject格式不符合要求时,会抛出com.eos.das.entity.DASEntityRuntimeException异常。

  2. 规则说明 无。

# 【参考案例】

示例:将查询客户信息的criteria对象生成where语句。

  • 场景描述 无。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName java.lang.String default 常量 传引用
参数 criteriaDataObject commonj.sdo.DataObject criteria 变量 传引用
返回值 out0 java.lang.String result 变量 传引用
  • 参数描述 无。

  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <criteria __id="1" __type="sdo:com.primeton.das.criteria.criteriaType">
            <_entity __type="java:java.lang.String">
                com.primeton.eos.foundation.example.data.CUST
            </_entity>
            <_select/>
            <_expr __id="2" __type="java:com.primeton.ext.data.sdo.collection.ContainerAwareList">
                <__entry __id="3" __index="0" __type="sdo:com.primeton.das.criteria.exprType">
                    <_op __type="java:java.lang.String">in</_op>
                    <_min/>
                    <_max/>
                    <_likeRule/>
                    <_dateRule/>
                    <_pattern/>
                    <_year/>
                    <_quarter/>
                    <_month/>
                    <_opProperty/>
                    <_ref/>
                    <_processNullValue/>
                    <CUSTID __type="java:java.lang.String">2,3</CUSTID>
                </__entry>
            </_expr>
            <_and __collection="list"/>
            <_or __collection="list"/>
            <_not __collection="list"/>
            <_order __collection="list"/>
            <_orderby __collection="list"/>
            <_group/>
            <_distinct/>
            <_association __collection="list"/>
            <_ref __collection="list"/>
            <_lock/>
        </criteria>
        <result __isNullOrEmpty="null"/>
    </__root>
</bizContext>
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <criteria __id="1" __type="sdo:com.primeton.das.criteria.criteriaType">
            <_entity __type="java:java.lang.String">
                com.primeton.eos.foundation.example.data.CUST
            </_entity>
            <_select/>
            <_expr __id="2" __type="java:com.primeton.ext.data.sdo.collection.ContainerAwareList">
                <__entry __id="3" __index="0" __type="sdo:com.primeton.das.criteria.exprType">
                    <_op __type="java:java.lang.String">in</_op>
                    <_min/>
                    <_max/>
                    <_likeRule/>
                    <_dateRule/>
                    <_pattern/>
                    <_year/>
                    <_quarter/>
                    <_month/>
                    <_opProperty/>
                    <_ref/>
                    <_processNullValue/>
                    <CUSTID __type="java:java.lang.String">2,3</CUSTID>
                </__entry>
            </_expr>
            <_and __collection="list"/>
            <_or __collection="list"/>
            <_not __collection="list"/>
            <_order __collection="list"/>
            <_orderby __collection="list"/>
            <_group/>
            <_distinct/>
            <_association __collection="list"/>
            <_ref __collection="list"/>
            <_lock/>
        </criteria>
        <result __type="java:java.lang.String">where CUST.CUSTID in (2, 3)</result>
    </__root>
</bizContext>

# getNextSequence:根据名称获得序列号值

# 【功能说明】

根据sequence ID获得序列号值。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.getNextSequence,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 name String 序列号名称
返回值 out0 long 序列号值
  1. 抛出异常说明 获取序列号出错时抛出异常java.lang.Exception。

  2. 规则说明 默认情况下,sequence一次可以缓存100个值,超过约定个数才会从数据库重新取值。如果没用到100个且系统发生重启,那么再次调用getSequence方法取值,就会发现取得的sequence值是下一组100个sequence的第一个值。也可通过修改当前应用的EOS Server系统配置文件sys-config.xml把100修改成其他值。具体配置如下:

<module name="Das">
...
 <group name="PoolSize">
        <configValue key="PoolSize">100</configValue>
 </group>
...
</module>

sequence与数据源

EOS是通过表EOS_UNIQUE_TABLE来存放这些sequence值的。 关于从哪个数据源中查找EOS_UNIQUE_TABLE表,EOS首先会从名称是EOS-Unique的数据源中去查找EOS_UNIQUE_TABLE表;如果没有找到名称是EOS-Unique的数据源 (注意:不是在EOS-Unique数据源中找不到EOS_UNIQUE_TABLE表,如果没找到表,会直接抛异常) ,EOS会从名称是default的数据源中去查找EOS_UNIQUE_TABLE表,如果再没有找到default的数据源,就会抛出EOS运行时异常。

# 【参考案例】

示例:根据sequence的名称获取一个序列号值。

  • 场景描述 获取一个序列号值。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 name String test_sequense 常量 传引用
返回值 out0 long value 变量 传引用
  • 参数描述

    • 参数为序列号名称
    • 返回值为返回的序列号值
  • 其他说明 功能:根据sequence的名称获取对应的sequence值。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __isNullOrEmpty="empty" __type="java:java.util.HashMap"/>
</bizContext>
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <value __type="java:java.lang.Long">1</value>
    </__root>
</bizContext>

# getPrimaryKey:获取持久化实体主键的序列号的值

# 【功能说明】

获取持久化实体主键的序列号的值,如果主键字段已经有值将不再生成主键。主键的序列号的名称是"实体名称+'.'+属性名称"。如果一个实体有多个主键,则依次赋值。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.getPrimaryKey,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 entity DataObject 持久化实体对象
  1. 抛出异常说明 无。

  2. 规则说明 无。

# 【参考案例】

示例:为CUST实体获取主键。

  • 场景描述 增加CUST表记录,获取主键编号。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 entity DataObject cust 变量 传引用
  • 参数描述 第一个参数为要获取主键的实体(CUST)。

  • 其他说明 功能:对于组合主键的表会依次赋值。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <cust __id="1" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID/>
            <CUSTCODE/>
            <CUSTNAME/>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </cust>
    </__root>
</bizContext>
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <cust __id="1" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID __type="java:java.lang.Integer">1</CUSTID>
            <CUSTCODE __type="java:java.lang.String">1</CUSTCODE>
            <CUSTNAME/>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </cust>
    </__root>
</bizContext>

# getTableName:获取持久化实体对应的表名

# 【功能说明】

获取持久化实体对应的表名。

说明

传入的entityName必须是持久化实体的实体名称,如果传入的是非持久化实体或一般实体的实体名称,会抛出EOSRuntimeException异常。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.getTableName,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
类型 名称 数据类型 参数描述
参数 dsName java.lang.String 数据源名称,例如"default"
参数 entityName java.lang.String 持久化实体全名
返回值 java.lang.String 对应的表名
  1. 抛出异常说明 当参数entityName为null或空字符串时,会抛出com.eos.system.exception.EOSRuntimeException异常。 如果传入的entityName是非持久化实体或一般实体的实体名称,会抛出ExceptionCode=24000053的EOSRuntimeException异常。

  2. 规则说明 无。

# 【参考案例】

示例:获取持久化实体com.primeton.foundation.database.sysdataset.Customer对应的表名。

  • 场景描述 无。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName java.lang.String default 常量 传引用
参数 entityName java.lang.String com.primeton.eos.foundation.example.data.CUST 常量 传引用
返回值 out0 java.lang.String result 变量 传引用
  • 参数描述 无。

  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <result __isNullOrEmpty="null"/>
    </__root>
</bizContext>
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <result __type="java:java.lang.String">CUST</result>
    </__root>
</bizContext>

# insertEntityCascade:级联方式新增一条记录

# 【功能说明】

级联方式新增一条记录(只支持单层聚合方式一对多的级联操作,不支持一对一级联)。如果主键字段值为空将自动生成一个主键。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.insertEntityCascade,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 entity DataObject 数据实体
  1. 抛出异常说明 无。

  2. 规则说明 无。

# 【参考案例】

示例:本案例用于新增组织和操作员信息。

  • 场景描述

    无。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 entity DataObject org 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为数据实体(一对多的数据实体)
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <org __id="1" __type="sdo:com.primeton.eos.foundation.example.data.O_ORG">
            <ORG_ID __type="java:java.lang.Long">5</ORG_ID>
            <PARENT_ORG_ID/>
            <ORG_NAME __type="java:java.lang.String">org_5</ORG_NAME>
            <ORG_CODE __type="java:java.lang.String">org_5</ORG_CODE>
            <ORG_ADDRESS/>
            <ORG_SEQ/>
            <O_OPERATORS __id="2" __type="java:com.primeton.ext.data.sdo.collection.ContainerAwareList">
                <__entry __id="3" __index="0"
__type="sdo:com.primeton.eos.foundation.example.data.O_OPERATOR">
                    <OPERATOR_ID __type="java:java.lang.Long">51</OPERATOR_ID>
                    <USER_ID/>
                    <USER_NAME __type="java:java.lang.String">oper_51</USER_NAME>
                    <BIRTHDAY/>
                    <GENDER/>
                    <POSTCODE/>
                    <ADDRESS/>
                    <PHONE/>
                    <EMAIL/>
                    <MEMO/>
                    <ORG_ID/>
                    <O_ORG __refid="1"/>
                </__entry>
                <__entry __id="4" __index="1"
__type="sdo:com.primeton.eos.foundation.example.data.O_OPERATOR">
                    <OPERATOR_ID __type="java:java.lang.Long">52</OPERATOR_ID>
                    <USER_ID/>
                    <USER_NAME __type="java:java.lang.String">oper_52</USER_NAME>
                    <BIRTHDAY/>
                    <GENDER/>
                    <POSTCODE/>
                    <ADDRESS/>
                    <PHONE/>
                    <EMAIL/>
                    <MEMO/>
                    <ORG_ID/>
                    <O_ORG __refid="1"/>
                </__entry>
            </O_OPERATORS>
        </org>
    </__root>
</bizContext>
  • 等效的SQL语句
insert into O_ORG (ORG_NAME, ORG_CODE, ORG_ID) values ('org_5', 'org_5', 5)
insert into O_OPERATOR (USER_NAME, ORG_ID, OPERATOR_ID) values ('oper_51', 5, 51)
insert into O_OPERATOR (USER_NAME, ORG_ID, OPERATOR_ID) values ('oper_52', 5, 52)
  • 调用后的bizContext 同调用前。

# lockEntity:根据主键锁定一条记录

# 【功能说明】

根据主键给当前记录添加一个事务锁。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.lockEntity,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 dataObject DataObject 数据实体值
  1. 抛出异常说明 锁定失败抛出异常com.eos.system.exception.EOSRuntimeException。

  2. 规则说明 无。

# 【参考案例】

示例:锁定CUST表某条记录。

  • 场景描述 要操作一条记录保证事务一致性,根据主键给表记录加事务锁。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 dataObject DataObject lockEntity 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为要加锁记录对应的实体(CUST)
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <lockEntity __id="1" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID __type="java:java.lang.Integer">1</CUSTID>
            <CUSTCODE __type="java:java.lang.String">cust_1</CUSTCODE>
            <CUSTNAME/>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </lockEntity>
    </__root>
</bizContext>
  • 等效的SQL语句
select CUSTID, CUSTNAME, BIRTH, SEX, ADDRESS from CUST where CUSTID = 1 and CUSTCODE='cust_1'
 for update;
  • 调用后的bizContext 同调用前。

# queryByNamedSql:根据命名SQL语句查询所有

# 【功能说明】

根据命名SQL语句进行查询。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.queryByNamedSql,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 nameSqlId String 命名SQL的唯一标识
参数 parameterObject Object 命名SQL语句绑定的变量(可以是SDO,或者是一个HashMap,或者是个基本类型的值)
返回值 out0 Object[] 符合查询条件的所有结果
  1. 抛出异常说明 查询失败抛出异常com.eos.system.exception.EOSRuntimeException。

  2. 规则说明 关于命名SQL的说明请参考《EOS基础参考手册》中的"数据服务\命名SQL"。

# 【参考案例】

示例:利用命名SQL查询CUST表数据。

  • 场景描述 根据命名SQL查询CUST表记录。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 nameSqlId String com.primeton.eos.foundation.example.namingsql.selectCustById 常量 传引用
参数 parameterObject Object 1 常量 传引用
返回值 out0 Object[] result 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为命名SQL的唯一标识(命名SQL名称)
    • 第三个参数为命名SQL语句绑定的变量(可以是SDO,或者是一个HashMap,或者是个基本类型的值)
    • 返回值为符合查询模板的所有结果,即CUST数组
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __isNullOrEmpty="empty" __type="java:java.util.HashMap"/>
</bizContext>
  • 等效的SQL语句
select CUSTID,CUSTCODE,CUSTNAME,BIRTH from CUST where CUSTID=1
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <result __id="1" __objectArray="true" __type="java:[Ljava.lang.Object;">
            <__entry __componentType="java:java.lang.Object" __id="2" __index="0" __objectArray="true"
             __type="sdo:com.primeton.eos.foundation.example.data.CUST">
                <CUSTID __type="java:java.lang.Integer">1</CUSTID>
                <CUSTCODE __type="java:java.lang.String">cust_1</CUSTCODE>
                <CUSTNAME __type="java:java.lang.String">cust_1</CUSTNAME>
                <BIRTH __type="java:java.util.Date">2009-09-12 00:00:00</BIRTH>
                <SEX/>
                <ADDRESS/>
                <PHOTO/>
            </__entry>
        </result>
    </__root>
</bizContext>

# queryByNamedSql:根据命名SQL语句查询部分

# 【功能说明】

根据命名SQL语句进行查询,可以设置起始行号和结果集长度。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.queryByNamedSql,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 nameSqlId String 命名SQL的唯一标识
参数 begin int begin 起始行号(从0开始)
参数 length int 结果集长度
参数 parameterObject Object 命名SQL语句绑定的变量(可以是SDO,或者是一个HashMap,或者基本类型的值)
返回值 out0 Object[] 符合查询条件的部分结果
  1. 抛出异常说明 查询失败抛出异常com.eos.system.exception.EOSRuntimeException。

  2. 规则说明 关于命名SQL的说明请参考《EOS基础参考手册》中的"数据服务\命名SQL"。

# 【参考案例】

示例:利用命名SQL从指定起始行,查询CUST表指定长度数据。

  • 场景描述 根据命名SQL查询CUST表记录一部分。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 nameSqlId String com.primeton.eos.foundation.example.namingsql.selectCusts 常量 传引用
参数 begin int 1 常量 传引用
参数 length int 1 常量 传引用
参数 parameterObject Object queryCondition 变量 传引用
返回值 out0 Object[] result 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为命名SQL的唯一标识(命名SQL名称)
    • 第三个参数为起始行号(从0开始)
    • 第四个参数为结果集长度
    • 第五个参数为命名SQL语句绑定的变量(可以是SDO,或者是一个HashMap,或者基本类型的值)
    • 返回值为符合查询模板的所有结果,即CUST集合数组
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <queryCondition __id="1" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID/>
            <CUSTCODE/>
            <CUSTNAME __type="java:java.lang.String">cust</CUSTNAME>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </queryCondition>
    </__root>
</bizContext>
  • 等效的SQL语句 以oracle为例:
select CUSTID,CUSTCODE,CUSTNAME,BIRTH from CUST WHERE CUSTNAME like 'cust%'

命名sql是按照滚动结果集的方式分页的,因此不会产生分页的sql语句

  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <queryCondition __id="1" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID/>
            <CUSTCODE/>
            <CUSTNAME __type="java:java.lang.String">cust</CUSTNAME>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </queryCondition>
        <result __id="2" __objectArray="true" __type="java:[Ljava.lang.Object;">
            <__entry __componentType="java:java.lang.Object" __id="3" __index="0" __objectArray="true"
             __type="sdo:com.primeton.eos.foundation.example.data.CUST">
                <CUSTID __type="java:java.lang.Integer">2</CUSTID>
                <CUSTCODE __type="java:java.lang.String">cust_2</CUSTCODE>
                <CUSTNAME __type="java:java.lang.String">cust_2</CUSTNAME>
                <BIRTH __type="java:java.util.Date">2009-09-09 00:00:00</BIRTH>
                <SEX/>
                <ADDRESS/>
                <PHOTO/>
            </__entry>
        </result>
    </__root>
</bizContext>

# queryByNamedSqlWithPage:根据命名SQL语句进行分页查询

# 【功能说明】

根据命名SQL语句进行分页查询。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.queryByNamedSqlWithPage,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 nameSqlId String 命名SQL的唯一标识
参数 pageCond DataObject 分页实体
参数 parameterObject Object 命名SQL语句绑定的变量(可以是SDO,或者是一个HashMap,或者基本类型的值)
返回值 out0 Object[] 查询结果集
  1. 抛出异常说明 查询失败抛出异常com.eos.system.exception.EOSRuntimeException。

  2. 规则说明 关于命名SQL的说明请参考《EOS基础参考手册》中的"数据服务\命名SQL"。

# 【参考案例】

示例:利用命名SQL对CUST表进行分页查询。

  • 场景描述 根据命名SQL分页查询CUST表记录。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 nameSqlId String com.primeton.eos.foundation.example.namingsql.selectCusts 常量 传引用
参数 pageCond DataObject pageCond 变量 传引用
参数 parameterObject Object queryCondition 变量 传引用
返回值 out0 Object[] result 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为命名SQL的唯一标识(命名SQL名称)
    • 第三个参数为分页实体(PageCond类型)
    • 第四个参数为查询条件(SDO对象或是HashMap,或者基本类型的值)
    • 返回值为查询结果集
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <pageCond __id="1" __type="sdo:com.eos.foundation.PageCond">
            <begin/>
            <length/>
            <count __type="java:java.lang.Integer">0</count>
            <totalPage/>
            <currentPage/>
            <isCount __type="java:java.lang.Boolean">true</isCount>
            <isFirst/>
            <isLast/>
            <size/>
        </pageCond>
        <queryCondition __id="2" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID/>
            <CUSTCODE/>
            <CUSTNAME __type="java:java.lang.String">cust</CUSTNAME>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </queryCondition>
    </__root>
</bizContext>
  • 等效的SQL语句 以oracle为例:
select CUSTID,CUSTCODE,CUSTNAME,BIRTH from CUST WHERE CUSTNAME like 'cust%'
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <pageCond __id="1" __type="sdo:com.eos.foundation.PageCond">
            <begin __type="java:java.lang.Integer">0</begin>
            <length __type="java:java.lang.Integer">10</length>
            <count __type="java:java.lang.Integer">3</count>
            <totalPage __type="java:java.lang.Integer">1</totalPage>
            <currentPage __type="java:java.lang.Integer">1</currentPage>
            <isCount __type="java:java.lang.Boolean">true</isCount>
            <isFirst __type="java:java.lang.Boolean">true</isFirst>
            <isLast __type="java:java.lang.Boolean">true</isLast>
            <size __type="java:java.lang.Integer">3</size>
        </pageCond>
        <queryCondition __id="2" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID/>
            <CUSTCODE/>
            <CUSTNAME __type="java:java.lang.String">cust</CUSTNAME>
            <BIRTH/>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </queryCondition>
        <result __id="3" __objectArray="true" __type="java:[Ljava.lang.Object;">
            <__entry __componentType="java:java.lang.Object" __id="4" __index="0" __objectArray="true"
             __type="sdo:com.primeton.eos.foundation.example.data.CUST">
                <CUSTID __type="java:java.lang.Integer">1</CUSTID>
                <CUSTCODE __type="java:java.lang.String">cust_1</CUSTCODE>
                <CUSTNAME __type="java:java.lang.String">cust_1</CUSTNAME>
                <BIRTH __type="java:java.util.Date">2009-09-12 00:00:00</BIRTH>
                <SEX/>
                <ADDRESS/>
                <PHOTO/>
            </__entry>
            <__entry __id="5" __index="1" __objectArray="true"
__type="sdo:com.primeton.eos.foundation.example.data.CUST">
                <CUSTID __type="java:java.lang.Integer">2</CUSTID>
                <CUSTCODE __type="java:java.lang.String">cust_2</CUSTCODE>
                <CUSTNAME __type="java:java.lang.String">cust_2</CUSTNAME>
                <BIRTH __type="java:java.util.Date">2009-09-09 00:00:00</BIRTH>
                <SEX/>
                <ADDRESS/>
                <PHOTO/>
            </__entry>
            <__entry __id="6" __index="2" __objectArray="true"
__type="sdo:com.primeton.eos.foundation.example.data.CUST">
                <CUSTID __type="java:java.lang.Integer">3</CUSTID>
                <CUSTCODE __type="java:java.lang.String">cust_3</CUSTCODE>
                <CUSTNAME __type="java:java.lang.String">cust_3</CUSTNAME>
                <BIRTH __type="java:java.util.Date">2009-09-09 00:00:00</BIRTH>
                <SEX/>
                <ADDRESS/>
                <PHOTO/>
            </__entry>
        </result>
    </__root>
</bizContext>

# queryEntitiesByCriteriaEntityWithPage:根据查询条件实体分页查询

# 【功能说明】

根据查询条件实体分页查询,根据查询条件实体指定查询Entity的字段。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.queryEntitiesByCriteriaEntityWithPage,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 criteriaEntity DataObject 查询条件实体
参数 pagecond DataObject 分页条件
返回值 out0 DataObject[] 符合查询条件的所有结果
  1. 抛出异常说明 查询失败抛出异常com.eos.system.exception.EOSRuntimeException。

  2. 规则说明 关于查询条件实体的说明请参考《EOS基础参考手册》中的"数据服务\CriteriaEntity"。

# 【参考案例】

示例:根据查询实体对CUST表进行分页查询。

  • 场景描述 根据CUSTID字段分页查询CUST表记录。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 criteriaEntity DataObject criteria 变量 传引用
参数 pageCond DataObject pageCond 变量 传引用
返回值 out0 DataObject[] result 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为查询条件实体(criteriaType)
    • 第三个参数为分页条件,分页对象(PageCond)
    • 返回值为符合查询模板的所有结果,即CUST数组
  • 其他说明 无。

  • 调用前的bizContext

<<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <criteria __id="1" __type="sdo:com.primeton.das.criteria.criteriaType">
            <_entity __type="java:java.lang.String">
                com.primeton.eos.foundation.example.data.CUST
            </_entity>
            <_select/>
            <_expr __id="3" __type="java:com.primeton.ext.data.sdo.collection.ContainerAwareList">
                <__entry __id="4" __index="0" __type="sdo:com.primeton.das.criteria.exprType">
                    <_op __type="java:java.lang.String">in</_op>
                    <_min/>
                    <_max/>
                    <_likeRule/>
                    <_dateRule/>
                    <_pattern/>
                    <_year/>
                    <_quarter/>
                    <_month/>
                    <_opProperty/>
                    <_ref/>
                    <_processNullValue/>
                    <CUSTID __type="java:java.lang.String">2,3</CUSTID>
                </__entry>
            </_expr>
            <_and __collection="list"/>
            <_or __collection="list"/>
            <_not __collection="list"/>
            <_order __collection="list"/>
            <_orderby __collection="list"/>
            <_group/>
            <_distinct/>
            <_association __collection="list"/>
            <_ref __collection="list"/>
            <_lock/>
        </criteria>
        <pageCond __id="2" __type="sdo:com.eos.foundation.PageCond">
            <begin/>
            <length/>
            <count __type="java:java.lang.Integer">0</count>
            <totalPage/>
            <currentPage/>
            <isCount __type="java:java.lang.Boolean">true</isCount>
            <isFirst/>
            <isLast/>
            <size/>
        </pageCond>
    </__root>
</bizContext>
  • 等效的SQL语句 以oracle为例:
select *
  from (select row_.*, rownum rownum_
          from (select CUSTID, CUSTCODE, CUSTNAME, BIRTH, SEX, ADDRESS
                  from CUST
                 where CUSTID in (2, 3)) row_
         where rownum <= 10)
 where rownum_ > 1
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <criteria __id="1" __type="sdo:com.primeton.das.criteria.criteriaType">
            <_entity __type="java:java.lang.String">
                com.primeton.eos.foundation.example.data.CUST
            </_entity>
            <_select/>
            <_expr __id="4" __type="java:com.primeton.ext.data.sdo.collection.ContainerAwareList">
                <__entry __id="7" __index="0" __type="sdo:com.primeton.das.criteria.exprType">
                    <_op __type="java:java.lang.String">in</_op>
                    <_min/>
                    <_max/>
                    <_likeRule/>
                    <_dateRule/>
                    <_pattern/>
                    <_year/>
                    <_quarter/>
                    <_month/>
                    <_opProperty/>
                    <_ref/>
                    <_processNullValue/>
                    <CUSTID __type="java:java.lang.String">2,3</CUSTID>
                </__entry>
            </_expr>
            <_and __collection="list"/>
            <_or __collection="list"/>
            <_not __collection="list"/>
            <_order __collection="list"/>
            <_orderby __collection="list"/>
            <_group/>
            <_distinct/>
            <_association __collection="list"/>
            <_ref __collection="list"/>
            <_lock/>
        </criteria>
        <pageCond __id="2" __type="sdo:com.eos.foundation.PageCond">
            <begin __type="java:java.lang.Integer">0</begin>
            <length __type="java:java.lang.Integer">10</length>
            <count __type="java:java.lang.Integer">2</count>
            <totalPage __type="java:java.lang.Integer">1</totalPage>
            <currentPage __type="java:java.lang.Integer">1</currentPage>
            <isCount __type="java:java.lang.Boolean">true</isCount>
            <isFirst __type="java:java.lang.Boolean">true</isFirst>
            <isLast __type="java:java.lang.Boolean">true</isLast>
            <size __type="java:java.lang.Integer">2</size>
        </pageCond>
        <result __id="3" __type="java:[Lcommonj.sdo.DataObject;">
            <__entry __componentType="java:commonj.sdo.DataObject" __id="5" __index="0" __type="sdo:
               com.primeton.eos.foundation.example.data.CUST">
                <CUSTID __type="java:java.lang.Integer">2</CUSTID>
                <CUSTCODE __type="java:java.lang.String">cust_2</CUSTCODE>
                <CUSTNAME __type="java:java.lang.String">cust_2</CUSTNAME>
                <BIRTH __type="java:java.sql.Date">2009-09-09</BIRTH>
                <SEX __isNullOrEmpty="null"/>
                <ADDRESS __isNullOrEmpty="null"/>
                <PHOTO/>
            </__entry>
            <__entry __id="6" __index="1" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
                <CUSTID __type="java:java.lang.Integer">3</CUSTID>
                <CUSTCODE __type="java:java.lang.String">cust_3</CUSTCODE>
                <CUSTNAME __type="java:java.lang.String">cust_3</CUSTNAME>
                <BIRTH __type="java:java.sql.Date">2009-09-09</BIRTH>
                <SEX __isNullOrEmpty="null"/>
                <ADDRESS __isNullOrEmpty="null"/>
                <PHOTO/>
            </__entry>
        </result>
    </__root>
</bizContext>

# queryEntitiesByTemplateWithPage:根据SDO数据模板分页查询

# 【功能说明】

根据SDO数据模板查询条件分页查询,会查询Entity的所有字段。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.queryEntitiesByTemplateWithPage,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 template DataObject SDO数据查询模板
参数 pagecond DataObject 分页条件。
返回值 out0 DataObject[] 符合查询模板的所有结果
  1. 抛出异常说明 查询失败抛出异常com.eos.system.exception.EOSRuntimeException。

  2. 规则说明 无。

# 【参考案例】

示例:利用查询模板对CUST表进行分页查询。

  • 场景描述 根据custname字段分页查询CUST表记录。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 template DataObject template 变量 传引用
参数 pageCond DataObject pageCond 变量 传引用
返回值 out0 DataObject[] result 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为查询条件实体(criteriaType)或者SDO数据查询模板
    • 第三个参数为分页条件,分页对象(PageCond)
    • 返回值为符合查询模板的所有结果,即CUST数组
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <pageCond __id="1" __type="sdo:com.eos.foundation.PageCond">
            <begin/>
            <length/>
            <count __type="java:java.lang.Integer">0</count>
            <totalPage/>
            <currentPage/>
            <isCount __type="java:java.lang.Boolean">true</isCount>
            <isFirst/>
            <isLast/>
            <size/>
        </pageCond>
        <template __id="2" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID/>
            <CUSTCODE/>
            <CUSTNAME/>
            <BIRTH __type="java:java.util.Date">2009-09-09 00:00:00</BIRTH>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </template>
    </__root>
</bizContext>
  • 等效的SQL语句 以oracle为例:
select *
  from (select row_.*, rownum rownum_
          from (select CUSTID, CUSTCODE, CUSTNAME, BIRTH, SEX, ADDRESS
                  from CUST
                 where BIRTH = to_date('2009-09-09', 'yyyy-MM-dd')) row_
         where rownum <= 10)
 where rownum_ > 1
  • 调用后的bizContext
<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <pageCond __id="1" __type="sdo:com.eos.foundation.PageCond">
            <begin __type="java:java.lang.Integer">0</begin>
            <length __type="java:java.lang.Integer">10</length>
            <count __type="java:java.lang.Integer">2</count>
            <totalPage __type="java:java.lang.Integer">1</totalPage>
            <currentPage __type="java:java.lang.Integer">1</currentPage>
            <isCount __type="java:java.lang.Boolean">true</isCount>
            <isFirst __type="java:java.lang.Boolean">true</isFirst>
            <isLast __type="java:java.lang.Boolean">true</isLast>
            <size __type="java:java.lang.Integer">2</size>
        </pageCond>
        <result __id="2" __type="java:[Lcommonj.sdo.DataObject;">
            <__entry __componentType="java:commonj.sdo.DataObject" __id="4" __index="0"
             __type="sdo:com.primeton.eos.foundation.example.data.CUST">
                <CUSTID __type="java:java.lang.Integer">2</CUSTID>
                <CUSTCODE __type="java:java.lang.String">cust_2</CUSTCODE>
                <CUSTNAME __type="java:java.lang.String">cust_2</CUSTNAME>
                <BIRTH __type="java:java.sql.Date">2009-09-09</BIRTH>
                <SEX __isNullOrEmpty="null"/>
                <ADDRESS __isNullOrEmpty="null"/>
                <PHOTO/>
            </__entry>
            <__entry __id="5" __index="1" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
                <CUSTID __type="java:java.lang.Integer">3</CUSTID>
                <CUSTCODE __type="java:java.lang.String">cust_3</CUSTCODE>
                <CUSTNAME __type="java:java.lang.String">cust_3</CUSTNAME>
                <BIRTH __type="java:java.sql.Date">2009-09-09</BIRTH>
                <SEX __isNullOrEmpty="null"/>
                <ADDRESS __isNullOrEmpty="null"/>
                <PHOTO/>
            </__entry>
        </result>
        <template __id="3" __type="sdo:com.primeton.eos.foundation.example.data.CUST">
            <CUSTID/>
            <CUSTCODE/>
            <CUSTNAME/>
            <BIRTH __type="java:java.util.Date">2009-09-09 00:00:00</BIRTH>
            <SEX/>
            <ADDRESS/>
            <PHOTO/>
        </template>
    </__root>
</bizContext>

# setSequenceValue:强制把某个序列号对应的sequence设值

# 【功能说明】

把某个sequence ID对应的sequence强制设置为value值,其中value值必须比当前sequence值大。数据服务会默认缓存100个sequence,只有当100个sequence全部用完后,新设定的sequence起始值才会生效。即调用此方法后,不会同步更新缓存。持久化步长配置保存在config\sys-config.xml文件中,具体如下:

<module name="Das">
...
    <group name="PoolSize">
        <configValue key="PoolSize">100</configValue>
    </group>
...
</module>

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.setSequenceValue,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 name Sting 序列号名称
参数 value long 序列号值(由于sequence是递增的,故该值必须比上一个sequence值大)
  1. 抛出异常说明 设置序列号出错时抛出异常java.lang.Exception。

  2. 规则说明 见本运算逻辑的功能说明。

# 【参考案例】

示例:强制把某个序列号对应的sequence设值。

  • 场景描述 强制把某个序列号对应的sequence设值。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 name String test_sequense_2 常量 传引用
参数 value long 300 常量 传引用
  • 参数描述

    • 第一个参数为序列号名称
    • 第二个参数为重新强制设置序列号的值
  • 其他说明 setSequenceValue,强制把某个序列号对应的sequence设值,需要重新启动应用服务器才生效。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __isNullOrEmpty="empty" __type="java:java.util.HashMap"/>
</bizContext>
  • 调用后的bizContext 同调用前。

# updateEntityCascade:级联方式更新一条记录

# 【功能说明】

级联方式更新一条记录(只支持单层聚合方式1->n的级联操作)。

级联更新规则如下:

  • 如果指定的N端属性没有设置要更新的值,N端对应的记录会被全部删除。

  • 如果指定的N端属性设置了需要更新的值:

    • 先删除N端的没有在要更新的值列表的记录,根据主键删除。

    • 如果要更新的值里有数据库中不存在的值,则执行insert。

    • 如果要更新的值里是数据库中已存在的值,则执行update。

      说明

      如果没有设置N端属性要更新的值,又不想删除N端对应的记录时,可以将要级联更新的属性名称设为"__null"。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.updateEntityCascade,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 entity DataObject 数据实体
参数 property String... 级联更新的从表属性名称(变参,可以是多个)
  1. 抛出异常说明 无。

  2. 规则说明 无。

# 【参考案例】

示例:本例用来更新组织及其操作员。

  • 场景描述: 更新组织及其操作员。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 entity DataObject org 变量 传引用
参数 property String O_OPERATORS 常量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为数据实体(一对多的数据实体)
    • 第三个参数为级联更新的从表属性名称(O_OPERATORS)
  • 其他说明 只支持单层聚合方式1->n的级联操作。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <org __id="1" __type="sdo:com.primeton.eos.foundation.example.data.O_ORG">
            <ORG_ID __type="java:java.lang.Long">5</ORG_ID>
            <PARENT_ORG_ID/>
            <ORG_NAME/>
            <ORG_CODE/>
            <ORG_ADDRESS/>
            <ORG_SEQ/>
            <O_OPERATORS __id="2" __type="java:com.primeton.ext.data.sdo.collection.ContainerAwareList">
                <__entry __id="3" __index="0"
__type="sdo:com.primeton.eos.foundation.example.data.O_OPERATOR">
                    <OPERATOR_ID __type="java:java.lang.Long">51</OPERATOR_ID>
                    <USER_ID/>
                    <USER_NAME __type="java:java.lang.String">update_oper_51</USER_NAME>
                    <BIRTHDAY/>
                    <GENDER/>
                    <POSTCODE/>
                    <ADDRESS/>
                    <PHONE/>
                    <EMAIL/>
                    <MEMO/>
                    <ORG_ID/>
                    <O_ORG __refid="1"/>
                </__entry>
                <__entry __id="4" __index="1"
__type="sdo:com.primeton.eos.foundation.example.data.O_OPERATOR">
                    <OPERATOR_ID __type="java:java.lang.Long">52</OPERATOR_ID>
                    <USER_ID/>
                    <USER_NAME __type="java:java.lang.String">update_oper_52</USER_NAME>
                    <BIRTHDAY/>
                    <GENDER/>
                    <POSTCODE/>
                    <ADDRESS/>
                    <PHONE/>
                    <EMAIL/>
                    <MEMO/>
                    <ORG_ID/>
                    <O_ORG __refid="1"/>
                </__entry>
            </O_OPERATORS>
        </org>
    </__root>
</bizContext>
  • 等效的SQL语句
delete from O_OPERATOR where not (O_OPERATOR.OPERATOR_ID=51 and O_OPERATOR.OPERATOR_ID=52)
                    and O_OPERATOR.ORG_ID=5
insert into O_OPERATOR (USER_NAME, ORG_ID, OPERATOR_ID) values ('update_oper_51', 5, 51)
insert into O_OPERATOR (USER_NAME, ORG_ID, OPERATOR_ID) values ('update_oper_52', 5, 52)
  • 调用后的bizContext 同调用前。
上次更新: 2023/3/20下午3:44:43