spring boot 集成 layui 实现主从结构数据维护

大家做项目时,经常会用到主从结构的数据维护,例如订单维护、个人成绩单等。结合实例,总结一下实现过程。本项目基于spring boot架构,UI使用layui。

以入库单维护为例

第一步实体类设计

主表实体类


public class ProductinStorage implements Serializable {

    /**
     * 入库主键
     */
    @TableId(value = "fproduct_in_id", type = IdType.AUTO)
    @ExcelField(value = "入库主键")
    private Long fproductInId;

   
    /**
     * 入库单号
     */
    @TableField("fstorage_book")
    @ExcelField(value = "入库单号")
    private String fstorageBook;

    /**
     * 入库时间
     */
    @TableField("fproduct_in_date")
    @ExcelField(value = "入库时间", writeConverter = TimeConverter.class)
    private Date fproductInDate;

    
    /**
     * 入库明细信息
     */
    @TableField(exist=false)
    private List storageDetails;

}

在主表中的增加一个List,用于存储子表信息

同时添加

@TableField(exist=false)

用于告诉mybatis该字段不对应数据库字段

子表实体类

public class ProductinStorageDetail implements Serializable {

    /**
     * 入库主键
     */
    @TableId(value = "fproduct_in_detail_id", type = IdType.AUTO)
    @ExcelField(value = "入库主键")
    private Long fproductInDetailId;

    /**
     * 入库数量
     */
    @TableField("fstorage_num")
    @ExcelField(value = "入库数量")
    private Float fstorageNum;
    /**
     * 入库单价
     */
    @TableField("fstorage_price")
    @ExcelField(value = "入库单价")
    private Float fstoragePrice;
    /**
     * 入库批次
     */
    @TableField("fstorage_batch")
    @ExcelField(value = "入库批次")
    private String fstorageBatch;

    /**
     * 有效期到
     */
    @TableField("fstorage_endDate")
    @ExcelField(value = "有效期到", writeConverter = TimeConverter.class)
    private Date fstorageEnddate;

    /**
     * 生产日期
     */
    @TableField("fstorage_productDate")
    @ExcelField(value = "生产日期", writeConverter = TimeConverter.class)
    private Date fstorageProductdate;

    /**
     * 存放位置
     */
    @TableField("fstorage_addr")
    @ExcelField(value = "存放位置")
    private String fstorageAddr;

    /**
     * 商品主键
     */
    @TableField("fproduct_id")
    @ExcelField(value = "商品主键")
    private String fproductId;

    /**
     * 商品名称
     */
    @TableField("fproduct_name")
    @ExcelField(value = "商品名称")
    private String fproductName;

    /**
     * 品牌名称
     */
    @TableField("fmodel_name")
    @ExcelField(value = "品牌名称")
    private String fmodelName;

    /**
     * 库存剩余数量
     */
    @TableField("fcanuesd_number")
    @ExcelField(value = "库存剩余数量")
    private Float fcanuesdNumber;


}

子表实体类设计没有特别的要求。

service层操作

实体类处理好以后,需要处理service层。在service层,需要处理主表保存时,同步保存子表信息。主表修改时,同步修改子表信息。主表删除时,同步删除子表信息。在查询主表明细时,加载子表信息后,一起返回给controller层。

service层主表保存操作

新增和修改主表时,可以考虑先将改主表对应的子表数据删除后,从新插入。

private boolean saveProductinStorageDetail(ProductinStorage productinStorage) {
        List storageDetails = productinStorage.getStorageDetails();
        for (ProductinStorageDetail detail : storageDetails
        ) {
            detail.setFproductInId(productinStorage.getFproductInId());
            detail.setFcanuesdNumber(detail.getFstorageNum());
        }
        return this.productinStorageDetailService.saveBatch(storageDetails);
    }

在service中,拿到主表的list结构,把主表的ID添加到子表中,批量保存子表信息。

service层主表获取操作

在获取主表信息时,同步获取子表信息

    public ProductinStorage getById(Serializable id) {
        ProductinStorage productinStorage = this.baseMapper.selectById(id);
        if (productinStorage != null) {
            ProductinStorageDetail detail = new ProductinStorageDetail();
            detail.setFproductInId(productinStorage.getFproductInId());
            List storageDetails = this.productinStorageDetailService.findProductinStorageDetails(detail);
            productinStorage.setStorageDetails(storageDetails);
        }
        return productinStorage;
    }

先根据ID获取到主表数据,根据主表ID获取到该主表对应从表信息。将从表数据添加到主表的List结构中。

controller层操作

主从表的controller层的功能全部集中到主表中。主表的controller层新增操作需要特别注意。需要创建一个主表实例,返回到新增页面,用于加载显示子表操作表格。

/**
    * 跳转到商品入库记录 新增页面
    * @return
    */
    @GetMapping(FebsConstant.VIEW_PREFIX + "productinStorage/add")
    @RequiresPermissions("productinStorage:add")
    public String productinStorageAddIndex(Model model){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        ProductinStorage productinStorage = new ProductinStorage();
        productinStorage.setFstorageBook("BIN"+simpleDateFormat.format(new Date()));
        List storageDetails = new ArrayList();
        productinStorage.setStorageDetails(storageDetails);
        model.addAttribute("productinStorage", productinStorage);
        return FebsUtil.view(page_prefix+"Add");
    }

在新增方法中,new一个主表的实例,给list属性赋值。

后台操作到此结束。下一节详细介绍UI端怎么操作。

你可能感兴趣的:(layui,java,spring,boot)