ConfigStore与json相互转换
最后更新:2024-10-12 23:54:33
|
状态:未完成
在低代码等自定义查询条件的解析过程比较麻烦,可以按ConfigStore约定的格式提交一个JSON实现ConfigStore的自动解析
同时ConfigStore也可以逆向解析成JSON格式用来保存或传输。【ConfigStore转SQL】
json格式参数ConfigStore.json()方法输出的格式
ConfigStore > JSON,JSON格式比较麻烦,需要什么条件可以先用ConfigStore逆向生成一下看看
ConfigStore configs = ConfigBuilder.build(json);
ServiceProxy.query(表, configs)
如果是多表关联,参考【多表关联约定】
同时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" } } ] } ] } ] } }