全栈低码设计开源框架 json-script-rule 主子表

说明

主子表是指在插入数据的时候一次性插入的不是一个单表,而是一个主表带着一堆子表一起插入数据的行为,主表和子表通过某个字段进行关联,将主表上的某个字段值赋给子表的整个插入过程。主子表的结构应该是一个向下递归的树形结构,常见于一些可折叠展开的列表页面,其每一条主数据都挂着N个子数据的场景,下面先看看如何配置主子表字段间的依赖

JSRuleTable(name="zs_test_son2")
public class ZsTestSon2 {
    ......
    @JSRuleField(dependent= "ZsTestPO.name")
    public String name;
}

从上面的伪码中可以看到注解上的dependent属性,它注明了所依赖的是ZsTestPO的name这个字段,当配置好这个依赖关系后,使用主子表时主表的name字段的值就会自动赋给子表的name属性,如果没有设置任何依赖关系,则默认主外键关联,届时主表的主键值会覆盖子表的外键值

发送json请求

{
    "rule": {
        "name": "dependents",
        "actions": [
            {
                "name": "add_dependent",
                "dependent": {
                    "class": "ZsTestPO",
                    "rules": {
                        "ZsTestPO": {
                            "name": "add_test",
                            "add": {
                                "uuid": ["id","remark"],
                                "defaults": {"test_field": "nnnnnn"},
                                "required": ["test_field","create_date"],
                                "ternary": ["test_field==oiu?tiu:ppp"],
                                "calculate": ["salary=-<salary>+0.5*(-10*10)","bonus=<bonus>-100"]
                            }
                        },
                        "test.business.po.ZsTestUpdate": {
                            "name": "add_son1",
                            "add": {
                                "uuid": ["id"],
                                "defaults": {"qian": 4}
                            }
                        },
                        "ZSTestSonSon": {
                            "name": "add_son1_son1",
                            "add": {
                                "uuid": ["id"]
                            }
                        },
                        "test.business.po.ZsTestSon2": {
                            "name": "add_son2",
                            "add": {
                                "uuid": ["id"]
                            }
                        }
                    },
                    "binds": [
                        {
                            "major": {"name": "ccc","salary": 22.5,"bonus": "110","birthDay": "2021/10/08","create_date": "1922-10-08"},
                            "minors": {
                                "test.business.po.ZsTestUpdate": [
                                    {
                                        "major": {"ohNo": "son1_1"},
                                        "minors": {
                                            "ZSTestSonSon": [
                                                {"major": {"oh_oh_no": "son1_son1_11"}},
                                                {"major": {"oh_oh_no": "son1_son1_12"}}
                                            ]
                                        }
                                    },
                                    {
                                        "major": {"ohNo": "son1_2"},
                                        "minors": {
                                            "ZSTestSonSon": [
                                                {"major": {"oh_oh_no": "son1_son1_21"}},
                                                {"major": {"oh_oh_no": "son1_son1_22"}}
                                            ]
                                        }
                                    }
                                ],
                                "test.business.po.ZsTestSon2": [
                                    {"major": {"ohYes": "son2_1"}},
                                    {"major": {"ohYes": "son2_2"}}
                                ]
                            }
                        },
                        {
                            "major": {"name": "mmm","salary": "11.50","bonus": 120,"birthDay": "2021-02-03","create_date": "1922-02-03"},
                            "minors": {
                                "test.business.po.ZsTestUpdate": [
                                    {"major": {"ohNo": "son1_1_1"}},
                                    {"major": {"ohNo": "son1_1_2"}}
                                ],
                                "test.business.po.ZsTestSon2": [
                                    {"major": {"ohYes": "son2_2_1"}},
                                    {"major": {"ohYes": "son2_2_2"}}
                                ]
                            }
                        }
                    ]
                }
            }
        ]
    }
}

这个json的请求非常的复杂,总共涉及到了4张表,接下来我们看一下这些属性都代表什么含义

  • className:主表对应的class名称,别名class,一个主子表只能有一个主表,主表下可以有多个子表
  • actionRules:插入规则集合,别名rules,key为要插入的类名,value为动作模型action,其模型只能为add,可以在add模型中定义具体的插入规则如主键生成方式为uuid等
  • binds:该对象属性用于绑定主子表的数据,也就是主表和哪几个子表的哪几条数据绑定在一起形成主子数据结构的。其major属性代表当前数据层级中的1条数据,其minors属性表示major数据的从数据集合,其中key要与actionRules属性中的key对应(否则会报未定义的错误),表示这些子数据是属于哪个类下面的,value为子数据,它是一个递归binds对象

返回结果

{
    "msg": "操作成功",
    "result": {
        "add_dependent": {
            "add_test": 2,
            "add_son1": 4,
            "add_son1_son1": 4,
            "add_son2": 4
        }
    },
    "log": null
    "code": 200
}

提示:每次请求都可能会存在多个action,这些action同在一个事务下,因此当前action中请求插入主子表的动作也是在一个事务之中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九天流云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值