Java实现动态表单

本文探讨了在业务需求中如何处理频繁变化的表单,提出了通过数据库行转列并在Java层面动态生成VO对象的方法,以此避免每次表单变更都需要修改数据库和发版上线的问题。方案利用Mybatis3.4.6、mysql5.7.26、cglib3.2.5和cglib-nodep3.2.5,详细介绍了创建SQL、Mybatis配置、Model、Mapper的实现过程,并提供了测试代码示例。
摘要由CSDN通过智能技术生成

前提

    我们的业务上会有各种各样的表单,常规的开发是一个表单,我们一般会在数据库里面建立一个对应的表,然后在代码中建立一个model与之对应,一旦建立好以后,就不能再对表单进行修改了,如果需要修改,就需要修改数据库表,修改model重新发版上线,对于频繁需要表单变更的情况来说很不友好。那么有没有方法可以对现有表单的列进行增删改甚至动态生成一个表单呢?这样的话表单变动就不用发版重新上线了,岂不美哉。解决办法自然是有的。

方案

    整体思路就是数据库行转列,在java层面动态生成VO返回给前台。

具体实现

    使用Mybatis3.4.6 + mysql5.7.26 + cglib3.2.5 + cglib-nodep3.2.5来进行实现

1.sql:CreateDB.sql

drop table  if exists form_metadata;
CREATE TABLE form_metadata
(
    ID int AUTO_INCREMENT,
    name varchar(100) comment '列名',
    property varchar(100) comment '属性名',
    property_type varchar(100) comment '属性类型',
    form_type int comment '表单类型 1 请假表  2 支付表 3 报销表',
    PRIMARY KEY (ID)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 DEFAULT COLLATE=utf8_general_ci;

drop table  if exists form_data;
CREATE TABLE form_data
(
    ID int AUTO_INCREMENT,
    property varchar(100) comment '属性名',
    `value` varchar(100) comment '属性值',
    form_type int comment '表单类型',
    row_id int comment '行数据ID,区分一行数据',
    user_id int comment '用户ID',
    PRIMARY KEY (ID)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 DEFAULT COLLATE=utf8_general_ci;

insert into form_metadata (name, property, property_type, form_type) values ("主键", "id", "java.lang.String", 1);
insert into form_metadata (name, property, property_type, form_type) values ("姓名", "name", "java.lang.String", 1);
insert into form_metadata (name, property, p
  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值