ConfigStore与json相互转换
最后更新:2025-05-29 17:29:58
|
状态:未完成
在低代码等自定义查询条件的解析过程比较麻烦,可以按ConfigStore约定的格式提交一个JSON实现ConfigStore的自动解析
同时ConfigStore也可以逆向生成JSON格式用来保存或传输。【ConfigStore转SQL】
json格式参数ConfigStore.json()方法输出的格式
ConfigStore > JSON,JSON格式比较麻烦,需要什么条件可以先用ConfigStore逆向生成一下看看
ConfigStore configs = ConfigBuilder.build(json);
ServiceProxy.query(表, configs)
如果是多表关联,参考【多表关联约定】
简化格式
items[]表示多个查询条件,一个条件就是一个{key,value},多个条件才需要JOIN,如果不写JOIN默认AND 如果有两个条件就是items[{k1,v2},{k2,v2}]
如果遇到带()的多层条件一个()相当于一个items[],如(k1=v1 AND (k2=v2 OR k3=v3)这里的后两个条件就放到一个items中 items[{k1,v1},{items:[{k2,v2},{k3,v3}]}]
同时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:查询条件,对下面json里的一个{} ConfigChain:继承自Config是多个条件的集合,集合中的条目有可能是Config也有可能还是个ConfigChain,可以理解成一个()里有多个条件,也对应下面json里的一个items[] join:表示前一个条件与当前条件的join方式(and或or) 下面的JSON是通过ConfigStore.json()逆向生成的,所以会有许多附加属性,最后有简化格式。 { "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 简化方式可以直接写String查询条件或[String | json]数组(见最后示例) "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": [1], //值对于IN BETWEEN会有多个值 "over_condition": false, //覆盖相同var查询条件 "over_value": true, //相同查询条件第二次赋值是否覆盖上一次的值,如果不覆盖则追加到values集合中 "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" } } ] } ] } ] } }
简化格式
conditions:{"ID=1"}
conditions:["ID=1", "CODE=2"]
conditions:[{}] //与上面的items条目格式一样
items[]表示多个查询条件,一个条件就是一个{key,value},多个条件才需要JOIN,如果不写JOIN默认AND 如果有两个条件就是items[{k1,v2},{k2,v2}]
如果遇到带()的多层条件一个()相当于一个items[],如(k1=v1 AND (k2=v2 OR k3=v3)这里的后两个条件就放到一个items中 items[{k1,v1},{items:[{k2,v2},{k3,v3}]}]