现在有业务需求,需要由页面上动态创建表单属性。比如,页面上创建用户模块,页面上可以手动添加用户名,字段类型,是否必填,是否需要字段验证等情况。
目前想的是 创建一个表,动态添加字段,但是设计到字段的属性(必填,显示等)需要存储到另外一张表。现在没有一些好的方法和思路对于这种设计,想问下大家有没有好的思路。
看过泛微的协同办公,他们就是动态创建表和字段,但是看不到人家的表结构设计,自己很想做个这样的设计,如果大家有思路或者有想法,可以和我一起做个开源东西出来呢
现在有业务需求,需要由页面上动态创建表单属性。比如,页面上创建用户模块,页面上可以手动添加用户名,字段类型,是否必填,是否需要字段验证等情况。
目前想的是 创建一个表,动态添加字段,但是设计到字段的属性(必填,显示等)需要存储到另外一张表。现在没有一些好的方法和思路对于这种设计,想问下大家有没有好的思路。
看过泛微的协同办公,他们就是动态创建表和字段,但是看不到人家的表结构设计,自己很想做个这样的设计,如果大家有思路或者有想法,可以和我一起做个开源东西出来呢
代码生成器,
@org.hibernate.annotations.Table注解可以自动创建表,像下面这样,
package com.snowball.base.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.Email;
@Data
@NoArgsConstructor
@Entity
@Table(name = "user")
@TableName("user")
@org.hibernate.annotations.Table(appliesTo = "user",comment = "用户表")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "用户表")
public class User extends BaseEntity{
private static final long serialVersionUID = 1L;
@ApiModelProperty("姓名")
@Column(columnDefinition = "varchar(50) comment'姓名'")
private String realName;
}
设计到字段的属性(必填,显示等)需要存储可以存json格式
{
name:"realname", // 变量名
type:"String", // 类型
isAnnotations:"true",是否验证
annotations:"NotNull",// 这个验证比较复杂,需要详细设计,有@Email,@NotNull@NotBlank@NotEmpty等等
}