关于主表和子表数据的保存

业务需求:

投注站信息保存在表A里,投注站下的设备信息保存在表B里, 一个投注站会有多个设备,要在一个表单里进行投注站和设备信息的填写,保存,回填,修改。

思路:

1)将子表作为一个表单的组件,可配置/拖拽生成表单;

2)点击保存,先保存主表的记录,主表记录保存成功后,将主表的主键作为子表的外键,保存子表数据。

RuoYi实现:

 参考文档: 后台手册 | RuoYi

1)按照文档里的sql,新建顾客表和商品表

2)在 系统工具 - 代码生成 菜单下,导入新建的表;

3)编辑顾客表的配置, 生成信息 - 生成模板选择主子表,点击确定生成代码到项目里, 重启项目,添加菜单,测试验证能进行信息的维护。

代码逻辑:

使用 $('#form-customer-add').serialize() 获取表单上的参数,接口使用 实体类 SysCustomer 接收参数,使用@Transactional 保障事务。

新增:先新增顾客记录,将新增得到的顾客标识设置到商品实体类,批量新增商品记录;

修改:先删除这个顾客下已有的商品记录,再批量新增商品记录,最后修改顾客记录;

删除:根据顾客标识删除商品记录和顾客记录;

查询单个顾客信息:关联sys_customer和sys_good表,查询出的数据,使用resultMap将信息添加到实体类里;

列表查询:使用mybatis的分页,查询列表数据,使用if标签,判断实体参数 SysCustomer 里的属性有值,进行条件查询;

其他:

1)RuoYi使用的MyBatis,在添加记录处理处理参数时,会忽略那些值为 null 的参数,批量添加商品时,item.goodsId为null, 数据库使用默认的的自增主键作为id。

2)类似的代码生成还有 eladmin、jeecg。eladmin 持久层使用的 Spring Boot Jpa ,jeecg 支持了表单上一个主表配置多个子表。

功能待完善的点:

1)主键使用的默认自增策略,需要改为使用随机字符串uunid

2)这里主表和子表的业务场景比较广泛,考虑使用通用代码的维护方式,不用重启项目就能生效

3)表单上添加上传图片、附件的功能

4)补充维护多个子表的功能

5)这里子表展示的列表内容, 取得商品表配置,商品日期展示的文本输入框,应该调整为日期选择框

6)配置为所见即所得,考虑结合表单生成

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Java中,您可以通过创建相应的实体类和数据传输对象(DTO)来接收前端传递的带有主表子表数据的请求。下面是一种可能的实现方式: 首先,创建主表子表的实体类,分别主表子表数据模型。例如,假设主表是Order,子表是OrderItem: ```java public class Order { private Long id; private String orderNumber; // 其他属性和对应的getter/setter方法 } public class OrderItem { private Long id; private Long orderId; private String itemName; // 其他属性和对应的getter/setter方法 } ``` 然后,创建一个数据传输对象(DTO),用于接收前端传递的带有主表子表数据的请求: ```java public class OrderDTO { private Order order; private List<OrderItem> orderItems; // 其他属性和对应的getter/setter方法 } ``` 在前端传递数据时,您可以将主表子表数据分别放在一个JSON对象中,然后将这个JSON对象作为请求的参数发送给后端。 在后端接收到请求后,您可以使用框架(如Spring MVC)自动将JSON数据解析为OrderDTO对象。然后,您可以根据OrderDTO中的数据创建对应的实体类对象,并进行保存操作。 以下是一个简单示例: ```java @RestController public class OrderController { @PostMapping("/orders") public void createOrder(@RequestBody OrderDTO orderDTO) { // 创建Order对象并保存 Order order = orderDTO.getOrder(); // 保存order对象到数据库 // 创建OrderItem对象列保存 List<OrderItem> orderItems = orderDTO.getOrderItems(); // 保存orderItems列数据库 } } ``` 在上述示例中,通过`@RequestBody`注解将前端传递的JSON数据自动解析为OrderDTO对象。然后,可以通过`getOrder()`和`getOrderItems()`方法获取Order和OrderItem数据,并将它们保存数据库中。 请注意,这只是一个简单的示例,具体的实现方式可能会有所不同,取决于您使用的框架和具体需求。这里提供的是一种常见的思路,希望能对您有所帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值