数据库操作
# 1 数据库操作介绍
在逻辑流中,内置了一系列数据库操作功能,以便用户能够根据不同的业务需求进行实现。这些数据库操作被封装在Java类中,通过使用运算逻辑图元的方式被调用,从而完成数据库的访问和操作。
为了保证系统的性能,特别注意不要滥用这些数据库操作API。不当的使用可能会导致系统性能的下降,甚至引发其他技术问题。
因此,在使用这些数据库操作功能时,用户应当按照推荐的方式进行合理使用,以确保系统的稳定性和高效性。
# 2 简单操作
# 2.1 查询业务数据
# 2.1.1 查询单条记录
示例一:如何使用主键查询单条业务数据?
数据库操作DatabaseDao.getEntityByKey(entityName, keyValues)
适用于根据主键查询单条业务数据,参数说明如下:
参数说明:
entityName:sdo实体名称,可在实体集中复制实体名称获取;
keyValues:主键值。
1.参数定义
逻辑流属性设置中定义返回值out
,数据类型为业务数据SDO实体test.img.aproject
。
2.运算逻辑配置
在运算逻辑中选择系统默认提供主键查询运算逻辑DatabaseDao.getEntityByKey(entityName, keyValues)
,为当前主键查询运算逻辑参数与返回值赋值,entityName
值中输入复制的待查询sdo实体名称,keyValues
参数值中输入字符串2
。在返回值中输入定义好的逻辑流返回值out
。
3.执行调试
执行当前逻辑流,可以看到返回值中查询到主键值为2
的业务数据。
# 2.1.2 查询多条记录
数据库操作DatabaseDao.queryEntitiesByKey(entityName, keyValues)
适用于查询多条业务数据记录,参数说明如下:
参数说明:
entityName:sdo实体名称,可在实体集中复制实体名称获取;
keyValues:主键值List集合。
示例二:如何通过主键值集合查询多条业务数据记录?
1.参数定义
逻辑流属性设置中定义输入参数param
、返回值out
,数据类型都为List类型。
2.运算逻辑配置
在运算逻辑中选择系统默认提供主键查询运算逻辑DatabaseDao.queryEntitiesByKey(entityName, keyValues)
,为当前查询运算逻辑参数与返回值赋值,entityName
值中输入待查询实体名称,keyValues
参数值中输入逻辑流参数params
。在返回值中输入定义好的逻辑流返回值out
。
3.执行调试
输入参数param中输入主键集合["2","21"]
,执行当前逻辑流,可以看到返回值中查到对应业务数据。
# 2.2 保存业务数据
# 2.2.1 保存单条记录
数据库操作DatabaseDao.saveEntity(entityOrCollectionOrArray)
适用于保存业务数据。参数说明如下:
参数说明:
entityOrCollectionOrArray: 待保存sdo实体数据,可以是实体、实体集合或者实体数组。
out:保存成功数据数量。
注意:
saveEntity()方法即可进行新增数据,又可进行修改数据,使用区别在于传入实体数据是否携带主键id值;
如果传入主键id值在数据库中存在时,会对该数据进行修改操作。
传入主键id值不存在或未传入主键id时,会新增该数据。
示例三:如何保存单条业务数据?
1.参数定义
逻辑流属性设置中定义输入参数param
,数据类型为业务数据sdo实体test.img.aproject
,返回值out
,数据类型为Int类型。
2.运算逻辑配置
在运算逻辑中选择系统默认提供保存运算逻辑DatabaseDao.saveEntity(entityOrCollectionOrArray)
,为当前保存运算逻辑参数与返回值赋值,entityOrCollectionOrArray
值中输入逻辑流参数param
。在返回值中输入定义好的逻辑流返回值out
。
3.执行调试
输入参数param中输入待保存数据{"name":"张三","age":"12","extend1":"测试服务保存"}
,执行当前逻辑流,可以看到返回值为1,即代表保存单条数据成功。
# 2.2.2 保存多条记录
保存多条业务记录时,只需在示例三基础上,将入参param勾选数组单选框,执行调试时,输入数组对象参数即可:
[{"name":"张三","age":"12","extend1":"测试服务保存1"},{"name":"李四","age":"13","extend1":"测试服务保存2"}]
执行当前逻辑流后从返回结果可以看出,多条数据保存成功。
# 2.3 删除业务数据
# 2.3.1 删除单条记录
数据库操作DatabaseDao.deleteEntity(entityOrCollectionOrArray)
适用于删除单条业务数据,参数说明如下:
参数说明:
entityOrCollectionOrArray:待删除sdo实体数据,可以是实体、实体集合或者实体数组。
实体中直接放入主键及对应主键值即可。例如:{"id":"1"}
out:删除成功数据数量。
示例四:如何删除单条业务数据?
1.参数定义
逻辑流属性设置中定义输入参数param
,数据类型为业务数据sdo实体test.img.aproject
,返回值out
,数据类型为Int类型。
2.运算逻辑配置
在运算逻辑中选择系统默认提供实体主键删除运算逻辑DatabaseDao.deleteEntity(entityOrCollectionOrArray)
。
为当前删除运算逻辑参数与返回值赋值,entityOrCollectionOrArray
值中输入逻辑流参数param
。在返回值中输入定义好的逻辑流返回值out
。
3.执行调试
输入参数param中输入数据{"id":"89"}
,执行当前逻辑流,可以看到返回值为1,即代表删除单条数据成功。
# 2.3.2 删除多条记录
删除多条业务记录时,只需在示例四基础上,将入参param勾选数组单选框,执行调试时,输入数组对象参数即可:[{"id":"90"},{"id":"91"}]
。
执行当前逻辑流后从返回结果可以看出,删除多条数据成功。
# 3 复杂操作
# 3.1 如何使用getEntityByProperty
数据库操作DatabaseDao.getEntityByProperty(entityName, propertyNameAndValues)
适用于根据SDO实体属性字段多条件查询单条业务数据,例如:根据应用表的编码和租户ID查询某条应用数据。其参数说明如下:
参数说明:
entityName:sdo实体名称,可在实体集中复制实体名称获取;
propertyNameAndValues:查询条件对象数组,例如:["code","AFCENTER","tenantId","sys_tenant"]
out:查询结果。
示例五:如何使用多条件参数查询单条数据?
1.参数定义
逻辑流属性设置中定义输入参数param
,数据类型为String,勾选数组选择框,返回值out
,数据类型为SDO实体类型,与待查询的业务表的SDO实体对应。
2.查询参数赋值
使用赋值图元为查询参数param数组进行赋值。数组首位是待查询实体中属性字段,下一位是该属性对应的值,如果是多条件查询按照此方式依次进行组装数组即可。
3.运算逻辑配置
在运算逻辑配置中选择运算逻辑DatabaseDao.getEntityByProperty(entityName, propertyNameAndValues)
,为当前多条件查询运算逻辑参数与返回值赋值,entityName
输入待查寻实体名称常量值,propertyNameAndValues
值中输入逻辑流参数param
。在返回值中输入定义好的逻辑流返回值out
。
3.执行调试
执行当前逻辑流,可以看到目标数据已获取成功。
# 3.2 如何使用queryEntitiesByProperty
数据库操作DatabaseDao.queryEntitiesByProperty(entityName, propertyNameAndValues)
适用于根据SDO实体属性字段多条件查询多条业务数据,例如:根据应用表的租户ID查询该租户下所有应用数据。其参数说明如下:
参数说明:
entityName:sdo实体名称,可在实体集中复制实体名称获取;
propertyNameAndValues:查询条件对象数组,例如:["tenantId","sys_tenant"]
out:查询结果集合,可用List类型数据接收。
示例六:如何使用多条件参数查询多条数据?
1.参数定义
逻辑流属性设置中定义输入参数param
,数据类型为String,勾选数组选择框,返回值out
,数据类型为List类型。
2.查询参数赋值
使用赋值图元为查询参数param数组进行赋值。数组首位是待查询实体中属性字段,下一位是该属性对应的值,如果是多条件查询按照此方式依次进行组装数组即可。
3.运算逻辑配置
在运算逻辑配置中选择运算逻辑DatabaseDao.queryEntitiesByProperty(entityName, propertyNameAndValues)
,为当前多条件查询运算逻辑参数与返回值赋值,entityName
输入待查寻实体名称常量值,propertyNameAndValues
值中输入逻辑流参数param
。在返回值中输入定义好的逻辑流返回值out
。
3.执行调试
执行当前逻辑流,通过断点调试结果可以看到目标数据已获取成功。
# 3.3 如何使用queryEntitiesByPropertyWithPage
数据库操作DatabaseDao.queryEntitiesByPropertyWithPage(pageIndex, pageSize, entityName, propertyNameAndValues)
适用于根据SDO实体属性字段多条件分页查询业务数据,例如:根据应用表的租户ID分页查询该租户下所有应用数据。其参数说明如下:
参数说明:
pageIndex:页码索引;
pageSize:每页大小;
entityName:sdo实体名称,可在实体集中复制实体名称获取;
propertyNameAndValues:查询条件对象数组,例如:["tenantId","sys_tenant"]
out:查询结果集合,可用PageResultList类型接收。
示例七:如何使用多条件参数分页查询数据?
1.参数定义
逻辑流属性设置中定义输入参数param
,数据类型为String,勾选数组选择框,返回值out
,数据类型为PageResultList类型。
2.查询参数赋值
使用赋值图元为查询参数param数组进行赋值。数组首位是待查询实体中属性字段,下一位是该属性对应的值,如果是多条件查询按照此方式依次进行组装数组即可。
3.运算逻辑配置
在运算逻辑配置中选择运算逻辑DatabaseDao.queryEntitiesByPropertyWithPage(pageIndex, pageSize, entityName, propertyNameAndValues)
,为当前多条件查询运算逻辑参数与返回值赋值,pageIndex
输入常量值0
,pageSize
输入常量值10
,entityName
输入待查寻实体名称常量值,propertyNameAndValues
值中输入逻辑流参数param
。在返回值中输入定义好的逻辑流返回值out
。
3.执行调试
执行当前逻辑流,通过断点调试结果可以看到目标数据已获取成功。
# 4 命名SQL
# 3.1 如何使用queryByNamedSql
数据库操作DatabaseDao.queryByNamedSql(nameSqlId, parameterObject)
适用于使用命名SQL查询所有数据,参数说明如下:
nameSqlId: 命名SQL的唯一标识,可在命名SQL列表一键复制;
parameterObject:数据类型为Object,命名SQL语句绑定的变量(可以是SDO,或者是一个HashMap,或者是个基本类型的值)
out:符合查询条件的所有结果。
示例八:如何使用queryByNamedSql查询数据?
1.场景描述
执行命名SQL,动态传入查询参数查询符合条件的业务表所有数据。
2.参数定义
逻辑流属性设置中定义输入参数param
,数据类型为SDO实体test.img.aproject
,返回值out
,数据类型为List类型。
注意:
这里param要作为输入参数动态传参至命名SQL语句中,参数类型要与命名SQL中parameterClass值保持一致。
3.运算逻辑配置
在运算逻辑配置中选择运算逻辑DatabaseDao.queryByNamedSql(nameSqlId, parameterObject)
,为当前命名SQL语句查询运算逻辑参数与返回值赋值,nameSqlId
输入待查询命名SQL的唯一标识常量值,parameterObject
值中输入逻辑流参数param
。在返回值中输入定义好的逻辑流返回值out
。
4.执行调试
执行当前逻辑流,可以看到目标数据已获取成功。
# 3.2 如何使用queryByNamedSqlWithPage
数据库操作DatabaseDao.queryByNamedSqlWithPage(nameSqlId, parameterObject, pageIndex, pageSize)
适用于使用命名SQL分页查询数据,参数说明如下:
nameSqlId: 命名SQL的唯一标识,可在命名SQL列表一键复制;
parameterObject:数据类型为Object,命名SQL语句绑定的变量(可以是SDO,或者是一个HashMap,或者是个基本类型的值)
pageIndex:页码索引;
pageSize:每页大小;
out:符合查询条件的所有结果,数据类型为PageResultList。
示例九:如何使用queryByNamedSqlWithPage分页查询数据?
1.场景描述
执行命名SQL,动态传入查询参数分页查询符合条件的业务表数据。
2.参数定义
逻辑流属性设置中定义输入参数param
,数据类型为SDO实体test.img.aproject
,返回值out
,数据类型为PageResultList类型。
注意:
这里param要作为输入参数动态传参至命名SQL语句中,参数类型要与命名SQL中parameterClass值保持一致。
3.运算逻辑配置
在运算逻辑配置中选择运算逻辑DatabaseDao.queryByNamedSqlWithPage(nameSqlId, parameterObject, pageIndex, pageSize)
,为当前命名SQL语句查询运算逻辑参数与返回值赋值,nameSqlId
输入待查询命名SQL的唯一标识常量值,parameterObject
值中输入逻辑流参数param
。pageIndex
输入常量0
,pageSize
输入常量5
,在返回值中输入定义好的逻辑流返回值out
。
4.执行调试
参数param中输入{"name":"张三"}
,执行当前逻辑流,通过断点调试可以看到目标数据已获取成功。
# 3.3 如何使用executeByNamedSql
数据库操作DatabaseDao.executeByNamedSql(nameSqlId, parameterObject)
适用于执行命名SQL语句,例如新增、修改、删除业务数据,参数说明如下:
nameSqlId: 命名SQL的唯一标识,可在命名SQL列表一键复制;
parameterObject:数据类型为Object,命名SQL语句绑定的变量(可以是SDO,或者是一个HashMap,或者是个基本类型的值)
out:执行命名SQL返回结果,返回值为1表示执行成功,为0表示执行失败。
示例十:如何使用executeByNamedSql执行命名SQL?
1.场景描述
执行insert命名SQL,动态传入实体参数插入一条数据至业务表。
2.参数定义
逻辑流属性设置中定义输入参数param
,数据类型为SDO实体test.img.aproject
,返回值out
,数据类型为Int类型。
注意:
这里param要作为输入参数动态传参至命名SQL语句中,参数类型要与命名SQL中parameterClass值保持一致。
3.运算逻辑配置
在运算逻辑配置中选择运算逻辑DatabaseDao.executeByNamedSql(nameSqlId, parameterObject)
,为当前命名SQL执行运算逻辑的参数与返回值赋值,nameSqlId
输入待查询命名SQL的唯一标识常量值,parameterObject
值中输入逻辑流参数param
,在返回值中输入定义好的逻辑流返回值out
。
4.执行调试
参数param中输入{"id":"12","name":"王五","age":"16","extend1":"执行插入命名SQL"}
,执行当前逻辑流,可以看到返回值out
为1
,表示命名SQL执行成功。
# 5 使用多数据源
EOS应用服务内支持多数据源,逻辑流内对多数据源实体进行数据库操作之前,需要首先进行实体数据源配置。
示例十一:如何对多数据源实体进行查询操作?
1.配置实体数据源
在当前应用管理配置-实体数据源配置中,选择待查询实体的数据源名称'eos8lj',包含的实体名称中输入SDO实体名称test.eos8lj.projectLj
。
说明:
包含与排除的实体名称输入规则:
① 多个实体名称用逗号分割;
② 实体名称必须是entityName;
③ 支持名称使用通配符 ‘*’;
示例:com.primeton.das.eosDictEntry.,com.primeton.das.criteria.;
多数据源实体未配置实体数据源时,默认使用为default数据源;
2.图元选择
服务中默认提供常用增删改查多数据源操作图元,选择查询实体图元,编排逻辑流,进行条件查询多数据源实体的数据查询。查询实体中使用到运算逻辑DatabaseDao.queryEntitiesByTemplate(template)
,参数说明如下:
template: 待查询多数据源sdo实体,对象属性参数值为空时查询全部;
out:符合查询条件的所有结果,数据类型为List。
3.参数定义
逻辑流属性设置中定义输入参数param
,数据类型为sdo实体test.eos8lj.projectLj
,返回值out
,数据类型为List类型。
4.运算逻辑配置
在运算逻辑配置中为当前运算逻辑的参数与返回值赋值,template
输入逻辑流定义输入参数param
,在返回值中输入定义好的逻辑流返回值out
。
5.执行调试
执行当前逻辑流,从返回结果可以看出,查询出数据源'eos8lj'中sdo实体test.eos8lj.projectLj
的全部数据。