public class DaoParam extends Object
主要用于数据库查询动作IQueryAction和数据库更新动作
IUpdateAction执行时的参数。
如果用于其他动作(如:动作流、webservice等),那只会获取方法
getParams()的返回值作为参数。
在执行数据操作时,系统有时候会调用setSubScript(int, Object)
方法来设置构造出来的条件,也会调用 setOnlyTotalCount(boolean)
方法用于只获取总记录数,也会可能调用setAllRow(boolean)等
方法设置获取所有行或分页大小。
所以在连续执行多个数据操作时,请尽量不要使用同一个DaoParam对象。
如果一定要用, 请先调用上面这两个方法将参数重设。
请注意!设置参数、排序列和显示列时,使用的是标识名称,而不是列名。如数据模型定义如下:
| 列名 | 标识名 | 类型 |
|---|---|---|
| column01 | name1 | String |
| column02 | name2 | int |
addParam("name1", "value"),
而不是addParam("column01", "value")。
同样设置排序列时应使用setOrderColumns("+name1,-name2"),
而不是setOrderColumns("+column01,-column02")。
| 限定符和类型 | 字段和说明 |
|---|---|
static int |
DEFAULT_PAGE_SIZE
默认的分页大小。
|
static int |
PAGE_START_NUM
起始的页码。
|
static String |
QUERY_SETTING_FLAG
结构化查询条件的参数名。
|
static Integer |
TOTAL_COUNT_MODEL_AUTO
总记录数计算方式,通过将游标移动到最后计算总记录数。
|
static Integer |
TOTAL_COUNT_MODEL_COUNT
总记录数计算方式,通过count语句计算总记录数。
|
static Integer |
TOTAL_COUNT_MODEL_NONE
总记录数计算方式,不计算总记录数。
|
| 构造器和说明 |
|---|
DaoParam() |
| 限定符和类型 | 方法和说明 |
|---|---|
void |
addParam(String key,
Object value)
添加一个参数。
|
void |
clearParams()
清空设置的参数。
|
void |
clearSubs()
清除所有已设置的子句。
|
String |
getDataSourceId()
获取执行数据库操作时需要使用的数据源编号。
|
String |
getDisplayColumns()
获取需要在结果中出现的列。
|
String |
getOrderColumns()
获取需要排序的列。
|
int |
getPageNum()
获取查询的起始页。
|
int |
getPageSize()
获取查询的分页大小。
|
Map<String,Object> |
getParams()
获取数据操作所需要的参数。
|
Map<String,Object> |
getParams(boolean create)
获取数据操作所需要的参数。
|
Map<Integer,Object> |
getSubs()
获取已设置的子句。
|
Integer |
getTotalCountModel()
获取总记录数的计算方式。
|
boolean |
isAllRow()
判断是否要获取所有记录。
|
boolean |
isAutoClose()
判断是否需要自动关闭数据库链接。
|
boolean |
isOnlyTotalCount()
是否仅仅获取总记录数。
|
void |
setAllRow(boolean all)
设置是否获取所有记录。
|
void |
setAllRow(boolean all,
boolean autoClose)
设置是否获取所有记录,是否需要自动关闭数据库链接。
|
void |
setDataSourceId(String dsId)
设置执行数据库操作时需要使用的数据源编号。
|
void |
setDisplayColumns(String config)
设置需要在结果中出现的列。
|
void |
setOnlyTotalCount(boolean only)
设置是否只获取总记录数。
|
void |
setOrderColumns(String config)
设置需要排序的列。
|
void |
setPageNum(int num)
设置查询的起始页。
|
void |
setPageSize(int size)
设置查询的分页大小。
|
void |
setParams(Map<String,?> param)
更新所有的参数。
|
void |
setParams(Object bean)
通过一个POJO对象更新所有的参数。
|
void |
setSubScript(int index,
Object script)
设置脚本子句。
|
void |
setTotalCountModel(Integer model)
设置总记录数的计算方式。
|
public static final int DEFAULT_PAGE_SIZE
如果只设置了起始页,未设置每页的记录数,那每页的记录数将设为此值。
setPageNum(int),
setPageSize(int),
常量字段值public static final Integer TOTAL_COUNT_MODEL_NONE
如果你只需要查询起始的几条记录,不关心总记录数,则可将总记录数计算方式设为此值。
在不计算总记录数的情况下,你仍然可以通过此方法 QueryResult.hasMoreRecord()
来判断在查询到的结果之后是否还有记录。
public static final Integer TOTAL_COUNT_MODEL_COUNT
此方式适合查询到的总记录数比较多的情况(一般大于1000条),系统将根据设置的查询条件, 生成一条count语句来获取总记录数。 如果查询到的总记录数在200~1000,那count和auto的方式都可以。 可统计一下大部分情况是否在500以上,如果是则可将总记录数计算方式设为此值。
public static final Integer TOTAL_COUNT_MODEL_AUTO
此方式适合查询到的总记录数比较少的情况(一般小于200条),系统将根据条件查询出所有的记录, 在读取完需要的数据后,将游标移动到最后来计算总数。 如果查询到的总记录数在200~1000,那count和auto的方式都可以。 可统计一下大部分情况是否在500以下,如果是则可将总记录数计算方式设为此值。
public static final int PAGE_START_NUM
即起始页的页码值。
public static final String QUERY_SETTING_FLAG
参数的结构是一个JSON字符串,每个节点代表条件的构造方式。
public Map<String,Object> getParams()
获取的Map是一个引用,对其有任何修改都会改变最终数据操作执行时的参数。
MapgetParams(boolean),
setParams(Map),
addParam(String, Object)public Map<String,Object> getParams(boolean create)
获取的Map是一个引用,对其有任何修改都会改变最终数据操作执行时的参数。
create - 当参数未设置时,是否需要创建空的Mapcreate的值,
为true时返回一个空的Map,为false
时返回nullsetParams(Map),
addParam(String, Object)public void setParams(Object bean) throws IllegalArgumentException
调用此方法将会清除之前设置的所有参数,并将bean转换成map之后作为新的值,
如果之后再对bean有任何修改都会改变最终数据操作执行时的参数。
另外之前通过方法getParams()获取的Map对象,也不会再与当前的
DaoParam对象有任何关联。
bean - POJO对象,如果给的值是null,
那其作用就是清除之前设置的参数IllegalArgumentException - 当参数不是POJO对象时会抛出此异常getParams(),
getParams(boolean),
addParam(String, Object)public void setParams(Map<String,?> param)
调用此方法将会清除之前设置的所有参数,并将param作为新的值,
即 getParams() == param为true。
如果之后再对param有任何修改都会改变最终数据操作执行时的参数。
另外之前通过方法getParams()获取的Map对象,也不会再与当前的
DaoParam对象有任何关联。
param - key-value形式的参数,如果给的值是null,
那其作用就是清除之前设置的参数getParams(),
getParams(boolean),
addParam(String, Object)public void addParam(String key, Object value)
如果给出的key已存在,则value将替换旧值。
如果之前使用setParams(Map)设置了一个不支持Map.put(Object, Object)
操作的Map(如Collections.unmodifiableMap(Map)),那将会复制一个新的
Map对象,再添加参数. 此时之前通过方法getParams()获取的
Map对象,也不会再与当前的DaoParam对象有任何关联。
key - 参数的名称,使用标识名value - 参数的值getParams(),
setParams(Map)public void clearParams()
此方法不是调用Map.clear()方法,而是直接设置为null,
其效果同setParams(null)。
所以之前通过方法getParams()获取的Map对象,
也不会再与当前的DaoParam对象有任何关联。
setParams(Map)public int getPageNum()
起始页从1开始,1表示第一页 2表示第二页...
getPageNum()public void setPageNum(int num)
如果需要清除已设置的起始页,则可设为-1。所有小于等于0的数均为无效值, 效果等同-1。
num - 要设置的起始页,从1开始,1表示第一页 2表示第二页...getPageNum()public int getPageSize()
如果未设置过起始页setPageNum(int),则默认值为
1000。
此值为普通查询可获取的最大记录数,如果查询的记录数大于此值,将会抛出异常
EternaException. 如果查询的记录数比较多,又需要获取所有的记录,
则可调用此方法setAllRow(true)。
此时查询的结果为游标方式,只能通过迭代的方式读取,数据读取过程中必须保持数据库连接。
如果已设置过起始页setPageNum(num > 0),
且设置的是有效值,则默认值为15。
setPageNum(int),
setPageSize(int),
setAllRow(boolean),
setAllRow(boolean, boolean)public void setPageSize(int size)
所设置的数字必须大于0,任何小于等于0的数字将被忽略。
如果设置的是有效的分页值,则是否获取所有记录
将会被强制设为false。
size - 每页的记录数getPageSize(),
setAllRow(boolean),
setAllRow(boolean, boolean)public boolean isAllRow()
getPageNum(),
getPageSize(),
setAllRow(boolean),
setAllRow(boolean, boolean)public boolean isAutoClose()
如果返回值为true,则会在获取最后一条记录时关闭数据库连接。
setAllRow(boolean, boolean)public void setAllRow(boolean all)
如果设置为true,将忽略起始页和
分页大小。并且在获取所有记录时, QueryResult.size()、
QueryResult.getTotalCount()、 QueryResult.getTotalPage()
这些方法的返回值都将变为-1,只能通过迭代获取所有记录。
all - 是否获取所有记录getPageNum(),
getPageSize(),
isAllRow(),
QueryResult.size(),
QueryResult.getTotalCount(),
QueryResult.getTotalPage()public void setAllRow(boolean all,
boolean autoClose)
注: 一般不需要调用此方法。
如果参数all设为false,则autoClose
值将会被强制设为false。
参数autoClose在大部分情况下是设置为false,
一小部分的特殊情况将在以后列出来。
all - 是否获取所有记录autoClose - 是否需要自动关闭数据库链接getPageNum(),
getPageSize(),
isAllRow(),
isAutoClose()public Integer getTotalCountModel()
null,
则表示未设置总记录数的计算方式setTotalCountModel(Integer),
TOTAL_COUNT_MODEL_AUTO,
TOTAL_COUNT_MODEL_COUNT,
TOTAL_COUNT_MODEL_NONEpublic void setTotalCountModel(Integer model)
对于自定义的查询动作,默认的总记录数计算方式是在定义的时候设置。
对于数据模型的默认查询动作,默认的总记录数计算方式为
count。
model - 总记录数的计算方式,如果设置为null,
则表示清除已设置的值,使用默认值getTotalCountModel(),
TOTAL_COUNT_MODEL_AUTO,
TOTAL_COUNT_MODEL_COUNT,
TOTAL_COUNT_MODEL_NONEpublic boolean isOnlyTotalCount()
如果返回值为true,系统将根据设置的查询条件,
只生成一条count语句来获取总记录数,而不执行查询。
IQueryAction.totalCount(DaoParam),
IQueryAction.totalCount(Map),
setOnlyTotalCount(boolean)public void setOnlyTotalCount(boolean only)
如果设为true,系统将根据设置的查询条件,
只生成一条count语句来获取总记录数,而不执行查询。
在调用IQueryAction.totalCount(DaoParam)方法时,
会自动将此值设置为true。
only - 是否只获取总记录数IQueryAction.totalCount(DaoParam),
IQueryAction.totalCount(Map),
isOnlyTotalCount()public void setDisplayColumns(String config)
如果原始的查询动作返回的列比较多,可以使用此方法设置只在结果中出现哪些列。 设置的名称使用标识名,而不是列名。
格式为:name1,name2。样例如下:
// 只需要查询标识名为id2和id1这两列
daoParam.setDisplayColumns("id2,id1");
config - 需要在结果中出现的列getDisplayColumns()public String getDisplayColumns()
null或空字符串,表示未设置,需返回所有列setDisplayColumns(String)public void setOrderColumns(String config)
设置的名称使用标识名,而不是列名。
格式为:(-|+)name1,(-|+)name2。样例如下:
// 先对标识名为id2的按降序排序,再对id1按升序排序
daoParam.setOrderColumns("-id2,+id1");
config - 排序列的配置getOrderColumns()public String getOrderColumns()
null或空字符串,表示未设置排序列setOrderColumns(String)public void setSubScript(int index,
Object script)
什么是子句,请参考充电宝中 《09系统配置及SQL语法.mp4》中“EMAP的SQL语法”里子句部分的讲解。
index - 子句的索引值,1为第一个 2为 第二个...script - 需要在子句中设置的脚本,可以是一个字符串(不包含参数的情况),
也可以是一个SubScript对象(包含参数的情况)getSubs(),
clearSubs(),
SubScriptpublic Map<Integer,Object> getSubs()
获取的Map是一个引用,对其有任何修改都会改变最终数据操作执行时的子句设置。
null,
那表示未设置任何子句setSubScript(int, Object),
clearSubs()public void clearSubs()
此方法不是调用Map.clear()方法,而是直接设置为null。
所以之前通过方法getSubs()获取的Map对象,
也不会再与当前的DaoParam对象有任何关联。
getSubs()public String getDataSourceId()
public void setDataSourceId(String dsId)
dsId - 数据源编号Copyright © 2022. All rights reserved.