Skip to content

Commit e7827a1

Browse files
committed
Server:优化非数组查询性能
1 parent a49d67e commit e7827a1

1 file changed

Lines changed: 16 additions & 19 deletions

File tree

  • APIJSON(Server)/APIJSON(Eclipse_JEE)/src/main/java/zuo/biao/apijson/server

APIJSON(Server)/APIJSON(Eclipse_JEE)/src/main/java/zuo/biao/apijson/server/Parser.java

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -494,20 +494,15 @@ private JSONObject getObject(String parentPath, final QueryConfig parentConfig,
494494
&& isInRelationMap(path) == false) {
495495
return request;
496496
}
497+
//优化查询性能并避免"[]":{"0":{"1":{}}}这种导致第3层当成[]的直接子Object
498+
final boolean isArrayChild = parentConfig != null && StringUtil.isNumer(name) && ("" + parentConfig.getPosition()).equals(name);
497499

498-
boolean nameIsNumber = StringUtil.isNumer(name);
499500
String table = Pair.parseEntry(name, true).getKey();
500501
Log.d(TAG, "getObject table = " + table);
501502

502-
QueryConfig config = nameIsNumber ? parentConfig : null;
503-
if (config == null) {
504-
config = new QueryConfig(requestMethod, table).setCount(1);
505-
}
506-
//避免"[]":{"0":{"1":{}}}这种导致第3层当成[]的直接子Object
507-
if (nameIsNumber && ("" + config.getPosition()).equals(table) == false) {
508-
config.setPosition(0).setCount(1).setPage(0);
509-
}
510-
503+
504+
505+
511506
boolean containRelation = false;
512507

513508
JSONObject transferredRequest = new JSONObject(true);//must init
@@ -530,11 +525,11 @@ && isInRelationMap(path) == false) {
530525

531526
if (value instanceof JSONObject) {//JSONObject,往下一级提取
532527
if (isArrayKey(key)) {//APIJSON Array
533-
result = getArray(path, config, key, (JSONObject) value);
528+
result = getArray(path, parentConfig, key, (JSONObject) value);
534529
} else {//APIJSON Object
535-
result = getObject(path, isFirst == false || nameIsNumber == false //[]里第一个不能为[]
536-
? null : config, key, (JSONObject) value);
537-
isFirst = false;
530+
result = getObject(path, isArrayChild == false || isFirst == false //以第0个JSONObject为准
531+
? null : parentConfig, key, (JSONObject) value);
532+
isFirst = false;//[]里第一个不能为[]
538533
}
539534
Log.i(TAG, "getObject key = " + key + "; result = " + result);
540535
if (result != null && result.isEmpty() == false) {//只添加!=null的值,可能数据库返回数据不够count
@@ -659,15 +654,17 @@ && isInRelationMap(path) == false) {
659654
if (parseRelation == false || isInRelationMap(path)) {//避免覆盖原来已经获取的
660655
query = true;
661656
// keyValuePathMap.remove(path);
662-
QueryConfig config2 = newQueryConfig(table, transferredRequest);
657+
QueryConfig config = newQueryConfig(table, transferredRequest);
663658

664-
if (parentConfig != null) {
665-
config2.setCount(parentConfig.getCount()).setPage(parentConfig.getPage())
659+
if (parentConfig == null) {//导致全部都是第0个 || isArrayChild == false) {
660+
config.setCount(1);
661+
} else {
662+
config.setCount(parentConfig.getCount()).setPage(parentConfig.getPage())
666663
.setPosition(parentConfig.getPosition());//避免position > 0的object获取不到
667664
}
668665

669666
try {
670-
transferredRequest = getSQLObject(config2);
667+
transferredRequest = getSQLObject(config);
671668
} catch (Exception e) {
672669
Log.e(TAG, "getObject try { transferredRequest = getSQLObject(config2); } catch (Exception e) {");
673670
if (e instanceof NotExistException) {//非严重异常,有时候只是数据不存在
@@ -717,7 +714,7 @@ && isInRelationMap(path) == false) {
717714

718715
/**获取对象数组,该对象数组处于parentObject内
719716
* @param parentPath parentObject的路径
720-
* @param parentConfig parentObject对子object的SQL查询配置
717+
* @param parentConfig parentObject对子object的SQL查询配置,需要传两个层级
721718
* @param name parentObject的key
722719
* @param request parentObject的value
723720
* @return 转为JSONArray不可行,因为会和被当成条件的key:JSONArray冲突。好像一般也就key{}:JSONArray用到??

0 commit comments

Comments
 (0)