ConfigStore与json相互转换

最后更新:2024-10-12 23:54:33 | 状态:未完成
在低代码等自定义查询条件的解析过程比较麻烦,可以按ConfigStore约定的格式提交一个JSON实现ConfigStore的自动解析
同时ConfigStore也可以逆向解析成JSON格式用来保存或传输。【ConfigStore转SQL
json格式参数ConfigStore.json()方法输出的格式
ConfigStore > JSON,JSON格式比较麻烦,需要什么条件可以先用ConfigStore逆向生成一下看看
    ConfigStore configs = new DefaultConfigStore();
    configs.and("ID", 1);
    configs.like("NAME", "ZH");
    configs.in("TYPE_CODE", "1,2,3".split(","));
    ConfigStore ors = new DefaultConfigStore();
    ors.and("A", 1);
    ors.or("B", 2);
    configs.or(ors);
    configs.group("TYPE_CODE").group("CLASS_CODE");
    configs.having("MIN(PRICE)>100").having("COUNT(*)>1"); 
    //如果having条件比较复杂可以通过ConfigStore构造
    ConfigStore having = new DefaultConfigStore();
    having.and("MAX(ID)>0").or("MIN(ID)>0").and(Compare.GREAT, "COUNT(*)", 1);
    configs.having(having);
    String json = configs.json(true); 
JSON > ConfigStore
ConfigStore configs = ConfigBuilder.build(json);
ServiceProxy.query(表, configs)
如果是多表关联,参考【多表关联约定
注意两个类Config和ConfigChain
Config:查询条件
ConfigChain:继承自Config是多个条件的集合,集合中的条目有可能是Config也有可能还是个ConfigChain



join:表示前一个条件与当前条件的join方式(and或or)
{
    "columns": {
        "query": [
			//需要查询列,如果未提供则查询
        ],
        "exclude": [
			//不需要查询的列,有些情况显要返回给前端的列非常多,但只有很少几个不需要返回如密码,
			//通过query一个一个指定太啰嗦,可以通过exclude指定表示 查除了exclude之外的所有列
        ]
    },
    "navi":{                    //分页(更多默认设置参考PageNaviConfig)
		"page":1,				  //当前第page页 默认1
		"vol":10                //每页vol行 默认PageNaviConfig.DEFAULT_VAR_PAGE_DEFAULT_VOL
	}
    "havings":["MIN(PRICE)>100","COUNT(*)>1"], 
    "havings":[{"text":"MIN(PRICE)>100"}]//自动生成的会比较复杂效果一样
    "havings":[] //与conditions.items格式一致
    "groups":["TYPE_CODE", "CLASS_CODE"], 
    "groups":[{column:"TYPE_CODE", column:"CLASS_CODE"}]//自动生成的会比较复杂效果一样 
    "conditions": {           //ConfigStore中查询条件的最外层对应属性ConfigChain
        "join": "AND",        //这里有JOIN方式,是因为有可能会有多个ConfigStore,前一个ConfigStore与当前ConigStore以and方式join
        "items": [            //ConfigChain中的集合,相当于SQL条件中的()中的多个and或or
            {                 //集合中的条目有可能还是一个集合,相当于多层嵌套
                "join": "AND",
                "items": [
                    {
                        "join": "AND",
                        "text": null,	//表示一个静态条件,没有参数 如 USER_ID IS NULL
                        "key": null,	//表示http参数名在AnylineController.condition("USER_ID:usr")形式中用到的key=usr
                        "var": "ID",	//列名或自定义SQL的查询条件ID
                        "compare": 10,	//比较运算符,参考org.anyline.entity.Compare枚举,默认10(equal)
                        "values": [		//值对于IN BETWEEN会有多个值
                            1
                        ],
                        "over_condition": false,	//覆盖相同var查询条件
                        "over_value": true,			//相同查询条件第二次赋值是否覆盖上一次的值,如果不覆盖则追加到集合中
                        "parser": {					//比较复杂的条件需要更多参数
                            "prefix": null,			//自定义SQL中的查询条件可能有多个占位符,赋值时需要prefix.var:key格式(查询条件id.占位符:http参数)
                            "var": "ID",			//与外层var作用重复,只需要指定一个即可
                            "class": null,			//参数值有可能需要预处理var:class.method(key)
                            "method": null,
                            "key": null,			//与外层key作用重复,只需要指定一个即可
                            "default": [],			//通过key没取到会值时的默认值
                            "compare": 10,			//与外层compare用重复,只需要指定一个即可
                            "join": "AND"			//与外层join作用重复,只需要指定一个即可
                        }
                    },
                    {
                        "join": "AND",
                        "text": null,
                        "key": null,
                        "var": "NAME",
                        "compare": 50,
                        "values": [
                            "ZH"
                        ],
                        "over_condition": false,
                        "over_value": true,
                        "parser": {
                            "prefix": null,
                            "var": "NAME",
                            "class": null,
                            "method": null,
                            "key": null,
                            "default": [

                            ],
                            "compare": 50,
                            "join": "AND"
                        }
                    },
                    {
                        "join": "AND",
                        "text": null,
                        "key": null,
                        "var": "TYPE_CODE",
                        "compare": 40,
                        "values": [
                            "1",
                            "2",
                            "3"
                        ],
                        "over_condition": false,
                        "over_value": true,
                        "parser": {
                            "prefix": null,
                            "var": "TYPE_CODE",
                            "class": null,
                            "method": null,
                            "key": null,
                            "default": [

                            ],
                            "compare": 40,
                            "join": "AND"
                        }
                    }
                ]
            },
            {
                "join": "OR",
                "items": [
                    {
                        "join": "AND",
                        "items": [
                            {
                                "join": "AND",
                                "text": null,
                                "key": null,
                                "var": "A",
                                "compare": 10,
                                "values": [
                                    1
                                ],
                                "over_condition": false,
                                "over_value": true,
                                "parser": {
                                    "prefix": null,
                                    "var": "A",
                                    "class": null,
                                    "method": null,
                                    "key": null,
                                    "default": [

                                    ],
                                    "compare": 10,
                                    "join": "AND"
                                }
                            },
                            {
                                "join": "OR",
                                "text": null,
                                "key": null,
                                "var": "B",
                                "compare": 10,
                                "values": null,
                                "over_condition": false,
                                "over_value": true,
                                "parser": {
                                    "prefix": null,
                                    "var": "B",
                                    "class": null,
                                    "method": null,
                                    "key": null,
                                    "default": [

                                    ],
                                    "compare": 10,
                                    "join": "OR"
                                }
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

首页 最近更新 搜索 提交 回复